我在Objective-C上玩了一點我的linux。其實我正在努力學習它,並且在研究這個任務時,我陷入了困境。Objective-C - 破壞對象後指針不爲零
下面是代碼:
#import <stdio.h>
#import <Foundation/NSObject.h>
int main(void) {
NSObject *a = [[NSObject alloc] init];
printf("Class retain count: %i\n", [a retainCount]);
printf("Is pointer nil: %i\n\n", (a==nil));
[a retain];
printf("Class retain count: %i\n", [a retainCount]);
printf("Is pointer nil: %i\n\n", (a==nil));
[a release];
printf("Class retain count: %i\n", [a retainCount]);
printf("Is pointer nil: %i\n\n", (a==nil));
[a release];
//printf("Class retain count: %i\n", [a retainCount]);
printf("Is pointer nil: %i\n", (a==nil));
return 0;
}
而這是輸出:
類保留計數:1
是指針零:0
類保留計數: 2
指針ni 1:0
類保留計數:1
是指針爲零:0
是指針爲零:0
我註釋掉最後的printf,因爲它導致程序崩潰(我得到「分割故障OBJ /測試」原因一個沒有設置爲零...)。那麼我做錯了什麼?爲什麼不將指針設置爲零?它只是保持它的舊值(在刪除對象之前)...
** retainCount **沒用。別叫它。 – bbum 2011-06-06 15:19:33
@bbum:你能解釋一下爲什麼? – xx77aBs 2011-06-06 17:40:42
對象的保留計數是一個通常沒有意義的內部實現細節(嘗試'[@「foo」retainCount]')。 http://stackoverflow.com/questions/4636146/when-to-use-retaincount – bbum 2011-06-06 22:25:50