生成並持有物件-alloc,new,copy,mutablecopy等方法
持有物件-retain方法
釋放物件-release方法
廢棄物件-dealloc方法
自己生成的物件,自己持有
使用alloc、new、copy、mutablecopy名稱開頭的方法名意味著自己生成的物件只有自己持有。
使用nsobject類的alloc類方法,new類方法能自己生成並持有物件。
allocmyobject、newthatobject、copythis、mutablecopyyourobject這樣的方法,也意味著自己生成並持有物件。
id obj = [nsobject new];
id obj = [[nsobject alloc] init];
非自己生成的物件,自己也能持有
因為非自己生成並持有,所以自己不是該物件的持有者。使用retain方法,使非自己生成的物件跟用alloc、new、copy、mutablecopy方法生成並持有的物件一樣,成為了自己所持有的。
id obj = [nsmutablearray array];
//取得的物件存在,但自己不持有物件。
[obj retain];
不再需要自己持有的物件時釋放
自己持有的物件,一旦不再需要,持有者有義務釋放該物件。釋放使用release方法。用alloc方法由自己生成並持有的物件就通過release方法釋放了。使用retain方法持有的物件,也同樣可以用release方法釋放。
id obj = [nsobject new];
[obj release];
id obj = [nsmutablearray array];
[obj retain];
[obj release];-(id) allocobject
id obj1 = [obj0 allocobject];
//自己生成持有物件 allocobject
-(id) object
id obj1 = [obj0 object];
//取得的物件存在,但自己不吃油物件
[obj1 retain];
//自己持有物件
autorelease方法,可以使取得的物件存在,但自己不持有物件。autorelease提供這樣的功能,使物件在超出制定的生存範圍時能夠自動並正確地釋放(呼叫release方法)。
非自己持有的物件無法釋放
自動引用計數
每當你產生乙個物件,arc分配一大塊控制項去儲存這個物件。除此之外,當乙個物件是不在需要,arc 將會收回這個例項物件所佔的空間。如果乙個物件的空間被釋放掉,但是你任然通過物件的引用呼叫方法或者屬性,你的程式將要崩潰。為了不讓物件被釋放掉 arc將會追蹤有多少屬性 常量 變數正在引用這個物件。只要有...
自動引用計數
使用弱引用解決迴圈強引用 如果兩個變數屬性都可以設定為nil,那麼就用弱引用來設定其中乙個屬性來解決迴圈強引用。class person weak var apartment apartment?deinit class apartment deinit var aperson person?per...
ARC(自動引用計數)
arc arc是automatic reference counting 自動引用計數 的縮寫,是ios5一同推出的新特性,但是ios4.3也支援arc,只是不能使用weak。使用arc,不需要再retain release autorelease,因為編譯器會在合適的地方自動的插入retain r...