[討論] retain count值

看板MacDev作者 (阿儒)時間15年前 (2009/12/26 21:57), 編輯推噓1(106)
留言7則, 3人參與, 最新討論串1/1
今天在寫iPhone程式時,出現一個奇怪的Bug,執行到一半就會當機。 找了很久發現問題出在retain count。 因為retain count變為0,東西被dealloc了。接下來取用就會出問題。 但我不曉得為什麼這樣retain count會變為0,跟大家討論一下。 以下只取用重點部分: 在.h中 ... NSMutableArray *currentStroke; .... @property (nonatomic, retain) NSMutableArray *currentStroke; 在.m中 @synthesize currentStroke; NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithCapacity:20]; NSLog(@"mutable array retain count1 = %d", [mutableArray retainCount]); currentStroke = mutableArray; NSLog(@"mutable array retain count2 = %d", [mutableArray retainCount]); NSLog(@"currentStroke retain count1 = %d", [currentStroke retainCount]); [currentStroke retain]; NSLog(@"currentStroke retain count2 = %d", [currentStroke retainCount]); 跑出來的結果 2009-12-26 21:52:38.950 [17246:207] mutable array retain count1 = 1 2009-12-26 21:52:38.951 [17246:207] mutable array retain count2 = 1 2009-12-26 21:52:38.951 [17246:207] currentStroke retain count1 = 1 2009-12-26 21:52:38.952 [17246:207] currentStroke retain count2 = 2 我的想法是 mutable array retain count1是1沒錯,但mutable array retain count2應該 為2,因為currentStroke的Setter會先release舊的(沒有東西),再retain新的 (mutableArray),這時為1+1=2. 後面的retain只是想確定用NSLog輸出的東西 正確。 請問我的想法哪裡錯了呢? 我是用Simulator - 3.1.2 | Debug. 謝謝! -- ▂▃▄▃▂ ◢ ˙ ˙ ▉▃ /喵喵~~~~ ◣╲ˍ ╱▎ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.126.4.1

12/26 22:15, , 1F
currentStroke = mutableArray;只是指定變數,沒有改變
12/26 22:15, 1F

12/26 22:15, , 2F
retain count,照你描述的,你應該要用
12/26 22:15, 2F

12/26 22:16, , 3F
[self setCurrentStroke:mutableArray]; 或者
12/26 22:16, 3F

12/26 22:16, , 4F
self.currentStroke = mutableArray; 才會呼叫到setter
12/26 22:16, 4F

12/27 00:06, , 5F
嗯嗯 原來是少加了self
12/27 00:06, 5F

12/27 00:06, , 6F
感謝!
12/27 00:06, 6F

12/27 00:48, , 7F
難怪u大很討厭dot operator... XD
12/27 00:48, 7F
文章代碼(AID): #1BDXPQrP (MacDev)
文章代碼(AID): #1BDXPQrP (MacDev)