如果我在發送-init
之前發佈了NSOperation
的實例,我得到segmentation fault
。Mac OS X 10.6中的NSOperation中是否存在錯誤?
的原因,我認爲這是合法的代碼:
- 蘋果做這its documentation。
- Gnustep在它的
implementation of NSNumber
中這樣做,所以相當肯定的是,這也是Apple的代碼。 (至少是。) NSObject
s-init
沒有做任何事情,因此-release
,它屬於NSObject
應該在此之前工作。
// gcc -o test -L/System/Library/Frameworks -framework Foundation test.m
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
NSOperation *theOperation = [NSOperation alloc];
[theOperation release];
}
- 你覺得,這是一個錯誤?
- 你能告訴我一個具有相同行爲的另一個類的例子嗎?
- 任何想法爲什麼會發生這種情況?
@gs請閱讀我的評論回覆你的回覆:) – 2009-10-04 23:51:27
我的觀點仍然支持:)。我確信NSOperation的'-init'會分配一些指針(指向結構或其他任何東西)。指針值不是由運行時設置爲NULL,所以調用'-release'釋放一個沒有啓動的指針,其值爲0(也就是你沒有訪問的地方:D) – 2009-10-05 10:40:57