0

強力なプロパティを宣言します。

@property (strong) NSString *message;

そして、私はメッセージを次のように設定しました:


self.message = [NSString stringWithFormat:@"xxxx %@",sth];

しかし、それはメッセージでクラッシュします:

*** -[CFString 保持]: 割り当て解除されたインスタンス 0x1015ea790 に送信されたメッセージ

プロパティを変更しても、strong-> copy してもクラッシュします。今、次を使用して修正しました:


self.message = [[NSString stringWithFormat:@"xxxx %@",sth] copy];

でも、いつもiOSで同じように書いているので、いまいち理解できません。

ちなみに、コードはココア、ノーアーク用です

アップデート1:

1 追加しました@synthesize message;

2 sth は例で、実際のコードは

self.message = [NSString stringWithFormat:@"xxxx %@", [[NSDate date] description]];

3 strong/copy プロパティのデフォルトの実装は次のようになることを覚えています。


- (void)setMessage:(NSString*)newMsg
{
   if (message != newMsg)
   {
        [newMsg retain];
        [message release];
        message = newMsg;
   }
}

だから私はプロパティ合成が私のためにコピー/保持を追加すると思います。それが私を混乱させるものです!

4

2 に答える 2

2

負の参照カウントの不均衡は、投稿されていないコードにあります。

このバリアントは間違っています:

self.message = [[NSString stringWithFormat:@"xxxx %@",sth] copy];

-- 正の参照カウントの不均衡を導入するだけです (特徴的な副作用: オブジェクトのリーク)。

まず、すべてのアナライザーの警告を修正します。それでも解決しない場合は、Instruments を実行します。各オブジェクトの参照カウント操作を記録できます:パフォーマンス ツールを使用した Iphone での EXEC_BAD_ACCESS のデバッグ、割り当て

問題を解決しないことに注意してcopyください。NSStringstrong

于 2013-05-20T05:06:14.513 に答える