2011年11月5日 星期六

Automatic Reference Counting (ARC) 2

用來限定變數和物件的生命週期關係有
__strong =>
預設值。跟以前變數指定時 retain,不用時就 release 差不多流程。
ex:NSURL url = [[NSURL alloc] initFileURLWithPath:sndpath];
__weak =>
弱連結,當指定的物件已被釋放時,該變數為 nil,iOS 4 不支援。
ex:NSURL __weak url = [[NSURL alloc] initFileURLWithPath:sndpath];
url 的結果仍然是 nil
__unsafe_unretained =>
弱連結,但指定的物件已被釋放時,該變數值不變。
ex:NSURL _unsafe_unretained url = [[NSURL alloc] initFileURLWithPath:sndpath];
url 不會是 nil,但實際上物件已經被釋放了
__autoreleasing => 跟以前的 autorelease 差不多。
  
如果是對應 CFTypeRef 類型的
__bridge => 跟 __wealk 差不多。
__bridge_retained => 跟 __strong 差不多。
__bridge_transfer => 參考值 -1,有點不太理解這個的用意
 
補充幾點
  1. C Struct 裡面不能使用物件指標,請愛用 Objectivce-C Class 去替代。
  2. retain, release, retainCount, or autorelease 不能被使用(會有紅色警告)。
  3. 可以自訂 dealloc 函式,但不要加 [super dealloc],因為 ARC 會幫你加上去。
  4. NSAllocateObjectNSDeallocateObject 不能被使用了。 
  5. idvoid * 沒辦法直接轉,要用 _bridge 系統的來告訴 ARC 如果管理轉換後的變數。
  6. 跟 NSAutoreleasePool 說 byebye,改用 @autoreleasepool { xxxxxx } 替代。 
  7. 以前用 NSZone 來處理記憶體的 copy,現在也要跟它說 bye 了。 
  8. 不能宣告 new 開頭的變數名稱

    沒有留言:

    張貼留言