3

サービス クラスには、シリアル キューに設定される非アトミック プロパティがあります。

@interface Service
@property (strong, nonatomic) NSDictionary *status;
@property (nonatomic) dispatch_queue_t queue;
...
@end

- (void)update:(NSDicationary *)paramDict {
    dispatch_async(self.queue, ^{
        ....
        self.status = updateDict;
    }
}


- (void)someMethod {
    NSDictionary *status = self.status;
}

でゲッターが呼び出されたときにアプリがクラッシュしましたobjc_autorelease + 6。これは、runtime/Clang/llvm 呼び出しのようです。

statusまた、クラッシュ ログは、プロパティがqueueスレッドに設定されたことも示していました。

アクセサーに原子性がないためにクラッシュしましたか? はいの場合、ゲッターがインスタンスの保持に失敗した方法と理由は? 自動解放プールは、合成された非アトミック セッター内で排出されましたか?

getter/setter メソッドを実装して、queue/a ミューテックス ロックで保護する必要がありますか?

4

2 に答える 2