@interface ClassA : UITableViewController {
NSString *member;
}
@end
メンバーは上記のように宣言されます。
使用する場合
NSString * astring = [[NSString alloc] initWithString:@"???"];
member = astring;
メンバーはひもを保持しますか?
@interface ClassA : UITableViewController {
NSString *member;
}
@end
メンバーは上記のように宣言されます。
使用する場合
NSString * astring = [[NSString alloc] initWithString:@"???"];
member = astring;
メンバーはひもを保持しますか?
いいえ、保持されません。これはインスタンス変数です(iVarとも呼ばれます)。古いオブジェクトを解放せず、新しいオブジェクトを保持しません(setterで宣言された一般的なプロパティとして)。
//プロパティ
self.member = aString;
が//[selfsetMember:aString]と同等のsetterを呼び出すと、古い値が解放され、保持(またはプロパティ宣言によってはコピー)メッセージがaStringに送信されます。
IfiVar
member = aString
//メモリ管理なし。
あなたが行ったことは、インスタンス変数(「ivar」と呼ばれることもあります)として宣言され、それを文字列にポイントします。変数自体を割り当てると文字列は保持されませんが、この例では、割り当てた後、文字列の保持カウントはすでに1になっています。
ARCを使用するかどうかに応じて、文字列はスコープの最後で解放されます。ARCを使用していない場合は、自分で文字列を解放する必要があります。そうは言っても、あなたの正確なケースastring
では、決して解放されない文字列リテラルであるため、その場合、メモリ管理は関係ありません。