1、不需要寫retain,release和autorelease三個關鍵字;
2、某對象只要被strong指標指向則不會被銷毀,直到所有指向它的strong指標都指向別的地方;
3、預設情況下,所有執行個體變數和局部變數都是strong類型的;
4、weak類型的指標不持有對象,當所指對象失去所有指向它的strong指標時,該對象被銷毀,同時該weak指標自動指向nil;
6、記住:-fobjc-arc 和 -fno-objc-arc;
7、除基本類型如int,float,bool等依然使用assign之外,大部分assign可以被weak代替;
8、Existing
instance variable for __weak property must be __weak解決方案:@property中聲明為weak的在屬性列表中應該聲明為__weak;
9、
OSStatus status = SecItemCopyMatching((CFDictionaryRef) attributeQuery, (CFTypeRef *) &attributeResult);
變更如下:
CFTypeRef attri = (__bridge CFTypeRef)attributeResult; OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)attributeQuery, &attri);
10、dealloc只是處理一些必要處理的事情,如中止一個還沒有完成的網路請求、刪除註冊的代理或通知.不需要release和[super dealloc];
11、使用@autoreleasepool{}塊代替NSAutoreleasePool;
12、屬性命名不以new開發;
13、不使用NSAllocateObject和NSDeallocateObject
14、
__bridge
簡單賦值,不會影響兩邊對象的retain count.
__bridge_transfer
賦值後釋放右邊的對象
__bridge_retained
賦值後也保留不釋放右邊的對象
15、IBOutlet最好都是weak型;
16、只要調用命名為Create, Copy, Retain的Core Foundation函數,你都需要使用 CFBridgingRelease() 安全地將值傳遞給ARC;
17、ARC Block, 避免捕獲self,推薦採用如下代碼模式:
__weak id weakSelf = self; block = ^() { id strongSelf = weakSelf; if (strongSelf != nil) { // do stuff with strongSelf } }
18、ARC單例
+ (id)sharedInstance { static ClassName *sharedInstance; static dispatch_once_t done; dispatch_once(&done, ^{ sharedInstance = [[ClassName alloc] init]; }); return sharedInstance; }