我想在 linux gnustep 环境中检查ARC 回写(我通过这篇文章准备好了)。
我有main.m文件:
#import <Foundation/Foundation.h>
__weak id obWeak;
int writeBack(id *);
int main(int argc, char * argv[]) {
@autoreleasepool {
id object;
writeBack(&object);
NSLog(@"object(%@) weak(%@)", object, obWeak);
object=nil;
NSLog(@"object(%@) weak(%@)", object, obWeak);
}
NSLog(@"weak %@", obWeak);
return 0;
}
int writeBack(id * aValue){
*aValue=[NSObject new];
obWeak = *aValue;
return 0;
}
GNUmake 文件:
include $(GNUSTEP_MAKEFILES)/common.make
CC=clang
TOOL_NAME = CmdTest
${TOOL_NAME}_OBJCFLAGS = -fobjc-arc
${TOOL_NAME}_BUNDLE_LIBS += -lobjc -lgnustep-base
${TOOL_NAME}_OBJC_FILES = main.m
include $(GNUSTEP_MAKEFILES)/tool.make
和 Linux控制台输出:
2013-03-28 13:50:33.840 CmdTest[7751] object(<NSObject: 0x2068c38>) weak(<NSObject: 0x2068c38>)
2013-03-28 13:50:33.842 CmdTest[7751] object((null)) weak(<NSObject: 0x2068c38>)
Segmentation fault (core dumped)
如您所见,当我尝试从 @autoreleasepool 块外部调用 NSLog(@"weak %@", obWeak) 时,出现了分段错误(核心转储) 。
我试图在 Mac pc 上的 XCode 上编译此代码,但没有收到任何错误。你能帮我理解它有什么问题吗?