iOS 5兩大隱藏特性

來源:互聯網
上載者:User

JSON序列化

iOS 5加入了NSJSONSerialization類,可以將JSON和Foundation objects相互轉換。來看一段圖片的程式碼範例:

 
  1. {"taken": "2011/07/13"
  2. "width": "3072",
  3. "height": "2304",
  4. "latitude": "39.52",
  5. "longitude": "-106.05",
  6. "url": "http://mypictures.com/12345.png"

解析起來很簡單,程式碼範例:

 
  1. NSError *error = nil;
  2. NSData *data = [NSData dataWithContentsOfURL:webServiceURL];
  3. NSDictionary *photo = [NSJSONSerialization
  4. JSONObjectWithData:data
  5. options:NSJSONReadingMutableLeaves
  6. error:&error];
  7. NSNumber *width = [photo objectForKey:@"width"];
  8. NSNumber *height = [photo objectForKey:@"height"]; 

齊活兒。不要另外去下載類庫啊啥的,樣本中的JSONOBjectWithData:options:error:方法具體是將資料參數轉向NSDictionary。

NSJSONSerialization可以很容易的將資料解析到記憶體或者Stream裡,對於大資料來說,用Stream的優勢更明顯,可以將數 據分塊來一點點的處理掉,從而使得記憶體資源得到盡量稀少的佔用。再看一段樣本,同上一段不同的是這次使用了JSONOBjectWithStream: variant方法:

 
  1. NSError *error = nil;
  2. NSStream *stream = [self getMyStream];
  3. NSDictionary *photo = [NSJSONSerialization
  4. JSONObjectWithStream:stream
  5. options:NSJSONReadingMutableLeaves
  6. error:&error];
  7. NSNumber *width = [photo objectForKey:@"width"];
  8. NSNumber *height = [photo objectForKey:@"height"]; 

iOS對JSON的支援甚至更進了一步,可以產生JSON資料。

ARC(自動引用計數)

很多用慣了有記憶體回收機制開發語言的開發人員,用Objective-C會很不習慣,總是要進行很多記憶體管理的工作。蘋果覺得記憶體回收這種嚴重影響電源使用效率的特性,同行動裝置天生的即時性是相衝突的。但是在iOS 5當中蘋果引入了自動記憶體管理機制,稱作ARC。

為瞭解決保留/釋放記憶體管理,ARC加入了一個新的概念稱作“歸零弱引用”,弱引用一旦不再沒引用機會被清零。至此所有弱引用不再會指向懸擺指標,而是被自動清理掉。

如果你用ARC,那麼必須向編譯器聲明你用Core Foundation對象幹嗎,否則會報錯。先看一個可以導致報錯的例子:

 
  1. NSDictionary *values =
  2.         [NSDictionary dictionaryWithObject:@"object" forKey:@"key"];
  3.  dictionary = (CFDictionaryRef)values;
  4. SomeFunctionCallThatNeesACFDictionary(dictionary); 

如果只是想用dictionary作為CFDictionaryRef類,只需加一個 __bridge 就可以來。再來看正確的樣本:

 
  1.   NSDictionary *values =
  2.         [NSDictionary dictionaryWithObject:@"object" forKey:@"key"];
  3. CFDictionaryRef dictionary = (__bridge CFDictionaryRef)values;
  4. SomeFunctionCallThatNeesACFDictionary(dictionary);
  5. NSDictionary *values =
  6.         [NSDictionary dictionaryWithObject:@"object" forKey:@"key"];
  7. CFDictionaryRef dictionary = (__bridge CFDictionaryRef)values;
  8. SomeFunctionCallThatNeesACFDictionary(dictionary); 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.