作者denru01 (阿儒)
看板MacDev
标题[讨论] retain count值
时间Sat Dec 26 21:57:42 2009
今天在写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
1F:推 Blueshiva:currentStroke = mutableArray;只是指定变数,没有改变 12/26 22:15
2F:→ Blueshiva:retain count,照你描述的,你应该要用 12/26 22:15
3F:→ Blueshiva:[self setCurrentStroke:mutableArray]; 或者 12/26 22:16
4F:→ Blueshiva:self.currentStroke = mutableArray; 才会呼叫到setter 12/26 22:16
5F:→ denru01:嗯嗯 原来是少加了self 12/27 00:06
6F:→ denru01:感谢! 12/27 00:06
7F:→ leondemon:难怪u大很讨厌dot operator... XD 12/27 00:48