コードは単純です。
@interface Test : NSObject
@property (nonatomic, strong) NSString * str; //strong
//@property (nonatomic, weak) NSString * str; //weak
-(void)func;
@end
@implementation Test
@synthesize str = _str;
-(void)func{
_str = @"test string"; // using ivar
//self.str = @"test string"; // using setter
}
@end
four
上記のコードには、強い/弱い、ivar/セッターの状況があります
メモリリークを引き起こすのはどのタイプですか?
どのタイプが同じですか?
NSLog を使用してコードをテストしましたが、すべて正常に実行されました (nil は出力されません)。なぜですか? たぶん約autorelease
?
- - - - - - - 編集 - - - - - - - -
ドキュメントを読んだところ、「文字列定数は決して解放されない」ことがわかりました
そのため、文字列が initWithString または initWithFormat で初期化されると、コードの動作が異なります (そして、私が書いたコードは間違っています)
initWithFormat を使用する場合、weak プロパティは常に nil です
メモリ管理の場合、ivar と setter は同じです: ARC の強力なプロパティには self.iVar が必要ですか?