類定義:爲什麼在釋放對象時仍然可以調用Objective C方法?
#import "MyClass.h"
@implementation MyClass
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (void)print
{
NSLog(@"Hello World");
}
@end
及主要文件:
MyClass * m = [[MyClass alloc]init];
[m print];
[m release];
[m print];
結果:
的Hello World
的Hello World
當對象是爲什麼第二個方法仍然調用釋放?
我可能會評論這種有爭議的模式。通過將變量設置爲零,您的應用程序在發佈後使用時不會崩潰,這很好,但它可能會更難追蹤內存管理中的錯誤,因爲它不會崩潰,所以您可能不知道自己有問題。由於這些問題,我個人不會使用這種模式。 – GorillaPatch 2011-04-15 07:07:52
我虔誠地使用存取方法,所以我可以依靠一方面的手指來了解我在過去十年中存在的內存管理錯誤的數量 - 而且這些錯誤很容易追蹤,因爲相關代碼總是很好封裝在setter方法中。 :-) – 2011-04-15 07:11:17
你是對的,有很少的例子不依賴accessor方法。但如果你這樣做,那麼設置爲零也是沒有必要的。我在內存管理方面也沒什麼問題。不過,對於初學者來說,我個人認爲,如果出現問題,應用程序會崩潰而不是默默地失敗。但是,將變量設置爲nil並使用'NSZombiesEnabled'似乎也是一個不錯的選擇。 – GorillaPatch 2011-04-15 07:16:02