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;
}

GNUmakefile :

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