0

私はいくつかの答えを見てきましたが、それらは十分に拡張されておらず、ARCが導入される前のものだったと思います。

したがって、2つのNSSstringがある場合、設定できますか

string1 =string2;

また

NSString * a1=@"String";
al=@"Lead";

メモリリークやその他の問題を引き起こすことなく?

編集:(コピー、非アトミック)に設定されたビューコントローラまたはデリゲートプロパティはどうですか?

Edit2:NSString * al =@"String"である必要があります。これが漏れないという考えを変えないことを願っています。

4

3 に答える 3

1

いいえ、文字列リテラルを割り当てたり再割り当てしたりしても、メモリリークは発生しません。ARCを使用せず、、、、、またはプレフィックスが付いたメソッドを使用allocするものを割り当てる場合にのみ、メモリリークについて心配する必要があります。retaincopymutableCopynew

NSString a1=[@"String" mutableCopy];  
al=@"Lead";//This will cause a leak since you called copy above.

詳細については、アドバンスメモリ管理ルールを参照してください。

于 2012-08-13T20:49:28.463 に答える
0

コードは安全で、リークすることはありません。CocoaとNSStringsは、これらの問題にどのように対処するかについて非常に賢明です。

NSStringは不変であるため、他の興味深いことが起こる可能性があります。また、ポインター自体について心配しようとすると、奇妙なことが起こる可能性があります。しかし、あなたの例はこれらの問題に悩まされていません。

于 2012-08-13T20:49:18.580 に答える
0

どちらもARCでリークすることはありません。

ただし、この場合は参照を処理していることに注意する必要があります。暗黙的なコピーは実行されません(コピーまたはコピー修飾プロパティを使用しない限り)。

編集:(コピー、非アトミック)に設定されたビューコントローラまたはデリゲートプロパティはどうですか?

sのためにNSString?はい、 scopyのデフォルトである必要がありますNSStringnonatomicすべてのデフォルトにする必要があります。もちろん、これには例外があります-デフォルトから逸脱する可能性がある場合。

于 2012-08-13T21:00:05.233 に答える