,因爲我是用retain
,release
計數玩,我遇到了一個情況,我不能夠解釋。請幫助我更好地理解它:
- 有一類
O
。它不包含變量,什麼也不做。 - 有一班Count。它初始化
O
和增量遞減計數它 - 有2個按鈕的UI筆尖:保留和釋放
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
o = [[O alloc]init]; // At this moment [o retainCount] is 1 as expected
....
每doRetain,如預期計算的增量
- (IBAction)doRetain:(id)sender {
[o retain];
NSString *result = [[NSString alloc] initWithFormat:@"%d", [o retainCount]];
[label setText: result];
[result release];
}
每當釋放被調用,計數減少
- (IBAction)doRelease:(id)sender {
[o release];
NSString *result = [[NSString alloc] initWithFormat:@"%d", [o retainCount]];
[label setText: result];
[result release];
}
考慮1保留和2個版本
- 我們開始爲1的保留計數,分配初始化序列後
- ,再進行人工保留計數上升到2
- 然後,我們減少計數,它下降到1
- 之後whic h下一個減少.....看起來什麼都不做保持計數仍然是1
- 此版本引用壞內存並使應用程序崩潰。
請幫助我理解這種行爲
這非常合理。感謝道格 – JAM