ARC 自動引用計數(shù) ARC不是垃圾回收,,而是編譯器自動插入代碼來減少程序員的代碼輸入和失誤,。 同時比垃圾和效率要高,因為其不影響運行時間,相當(dāng)于自己管理內(nèi)存。 總是通過屬性來管理實例變量(init/dealloc除外),,在dealloc中釋放所有屬性。 dealloc中會自動加入釋放實例變量的代碼,,因此不必要手段增加釋放實例變量的代碼,。不需要手動調(diào)用[super dealloc] 不要調(diào)用retain,release,autorelease,編譯器會自動插入相關(guān)代碼。 注意命名方式,,不要以copyXXX方式命名不想進行retain的方法,,編譯器會根據(jù)方法名自動retain。 C語言結(jié)構(gòu)體中不要有對象指針 id和void*只能通過橋接轉(zhuǎn)換來進行轉(zhuǎn)換 不要使用NSAutoreleasePool,而是使用@autoreleasepool{}代碼塊,。 轉(zhuǎn)換ARC代碼:Edit->Refactor->Convert to Objective-C ARC strong 相當(dāng)于retain。 Strong在ARC環(huán)境為默認(rèn)屬性類型,。 @property (nonatomic,readwrite,strong)NSString *title; @property (strong, nonatomic) UIViewController *viewController; @property (nonatomic, strong) id childObject; Default weak 取代之前的assign,,對象銷毀之后會自動置為nil,防止野指針,。 Assign不能自動置為nil,,需要手動置為nil。 Delegate基本總是使用weak,,以防止循環(huán)引用,。特殊情況是,希望在dealloc中調(diào)用delegate的某些方法進行釋放,,此時如果使用weak將引起異常,,因為此時已經(jīng)是nil了,那么采用assign更為合適,。 @property (weak, nonatomic) IBOutlet UIButton *myButton;//處于最頂層的IBOutlet應(yīng)該為strong @property (nonatomic, weak) id parentObject; @property(nonatomic,readwrite,weak) id <MyDelegate> delegate; @property (nonatomic, weak) NSObject <SomeDelegate> *delegate; assign 對基礎(chǔ)數(shù)據(jù)類型(NSInteger,,CGFloat)和C數(shù)據(jù)類型(int, float, double, char等) ’@property (nonatomic, assign) int n; @property (nonatomic, assign) BOOL isOK; @property (nonatomic, assign) CGFloat scalarFloat; @property (nonatomic, assign) CGPoint scalarStruct; Default retain NSObject及其子類。 Release舊值,,retain新值,。 Retain是指針復(fù)制(淺復(fù)制),引用計數(shù)加1,,而不會導(dǎo)致內(nèi)容被復(fù)制,。 @property (nonatomic, retain)UIColor *myColor; atomic Default nonatomic 非原子性訪問,對屬性賦值的時候不加鎖,,多線程并發(fā)訪問會提高性能 unsafe_unretained copy 復(fù)制內(nèi)容(深復(fù)制),,如果調(diào)用copy的是數(shù)組,則為指針復(fù)制(淺復(fù)制),,僅僅復(fù)制子元素的指針,。 @property (nonatomic,copy)NSString *title; @property (nonatomic, copy) NSMutableArray *myArray;//not recommended @property (nonatomic, copy) SomeBlockType someBlock; readonly readwrite Default retain cycle 循環(huán)保留 delegate和block是產(chǎn)生retain cycle的主要原因 dealloc 移除觀察者observers 注銷通知notification 設(shè)置非weak的delegate為nil 取消timer |
|