1

我想在 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 上编译此代码,但没有收到任何错误。你能帮我理解它有什么问题吗?

4

0 回答 0