我是Objective-C的初學者。 我正在通過編寫簡單的命令行代碼研究Objective-C中的內存管理。Objective-C 2.0的內存管理
我的環境如下。
- Mac OS X Mountain Lion。
- Xcode4.5
我寫了下面的代碼。
test.m
1 #import <Foundation/Foundation.h>
2 #import <stdio.h>
3
4 @interface A : NSObject
5 -(void)myprint;
6 @end
7
8 @implementation A
9 -(void)dealloc {
10 printf("dealloc!!\n");
11 [super dealloc];
12 }
13
14 -(void)myprint {
15 printf("myprint!!\n");
16 }
17 @end
18
19 int main(void) {
20
21 id obj1 = [[[NSObject alloc] init] autorelease];
22 id obj2 = [[A alloc] init];
23
24 [obj2 release];
25 [obj2 myprint];
26
27 return 0;
28 }
我建立這個代碼如下命令。(不帶ARC選項編譯)
clang -g -Wall -o main test.m -fno-objc-arc -framework Foundation
構建成功,沒有任何警告信息。 結果如下。
dealloc!!
myprint!!
我對這個結果有兩個問題。
第一個問題是關於自動釋放方法。 我認爲這段代碼會引發運行時錯誤,因爲 autorelease方法在沒有NSAutoreleasePool實例的情況下被調用。 爲什麼這段代碼不會引發運行時錯誤?
第二個問題是關於dealloc方法。 obj2在調用dealloc方法後響應myprint方法。 爲什麼在調用dealloc方法之後obj2響應myprint方法?
謝謝。
另外 - 我建議您專注於使用Xcode和Instruments,因爲它們在擴展您的項目方面要好得多。 – bbum