一、引用計數 app
iOS實例化一個新對象最經常使用的方式:NSObject *obj = [[NSObject alloc] init];全部的OC對象都有一個4個字節的引用計數器,最初對象的引用計數爲1.若是要引用這個對象,能夠對這個對象發送retain消息,引用計數會+1,引用完的話要用release使其引用計數-1.若是對象的引用計數爲0,對象所佔有的那塊內存將被釋放。對於局部變量在方法結束的時候就要釋放掉內存,否則會引發內存泄露 spa
二、引用計數與C、C++的內存管理相比的優點 指針
C,C++中的內存管理int *p1建立了一塊內存空間,p2, p3要使用這塊內存空間,就要指向這塊內存空間,若是任何一個指針釋放掉這塊內存空間,都會讓這塊內存空間消失,另外兩個指針就會成爲野指針,若是再使用這兩個指針中的一個,都會出現段錯誤,引發崩潰。而引用計數,只要不爲0,就不會出現提早釋放。 對象
三、開發文檔中對內存管理的表述 內存
開發文檔中有個對內存管理有個通用的表述:The basic role to apply is EveryThing that increases the reference counter with alloc, copy ,mutableCopy or retain is in charge of the corresponding [auto]release.適用於內存管理的通用規則是,只要使用alloc,copy, mutableCopy或retain使對象的引用計數+1,就有責任調用autorelease或release使引用計數-1. 開發
四、點語法中的內存管理, 文檔
@property (retain)NSString *str; get
@synthesize str; it
只要調用self.str = @「xxx」,str的引用計數就+1; 內存管理
上面的兩句話至關於經典語法:getter和setter。對屬性內存釋放通常用self.str = nil.不要直接發送release給屬性,即不要這樣寫[self.str release];使用屬性的時候不管用什麼方法建立的屬性,只要有retain或copy,都要把nil賦值給屬性。