3
@interface ClassA : UITableViewController {

    NSString *member;
}

@end

メンバーは上記のように宣言されます。

使用する場合

NSString * astring = [[NSString alloc] initWithString:@"???"];
member = astring;

メンバーはひもを保持しますか?

4

2 に答える 2

2

いいえ、保持されません。これはインスタンス変数です(iVarとも呼ばれます)。古いオブジェクトを解放せず、新しいオブジェクトを保持しません(setterで宣言された一般的なプロパティとして)。

//プロパティ self.member = aString;が//[selfsetMember:aString]と同等のsetterを呼び出すと、古い値が解放され、保持(またはプロパティ宣言によってはコピー)メッセージがaStringに送信されます。

IfiVar member = aString//メモリ管理なし。

于 2012-07-10T08:15:53.640 に答える
1

あなたが行ったことは、インスタンス変数(「ivar」と呼ばれることもあります)として宣言され、それを文字列にポイントします。変数自体を割り当てると文字列は保持されませんが、この例では、割り当てた後、文字列の保持カウントはすでに1になっています。

ARCを使用するかどうかに応じて、文字列はスコープの最後で解放されます。ARCを使用していない場合は、自分で文字列を解放する必要があります。そうは言っても、あなたの正確なケースastringでは、決して解放されない文字列リテラルであるため、その場合、メモリ管理は関係ありません。

于 2012-07-10T08:19:04.527 に答える