現在、私はObjective-Cの小さな理解の問題で困っています。違いは、allocとinitを使ってNSStringを宣言し、@ "myString"で代入することです。
:アーロン・ヒレガスの著書次の例のように、私はクラスのinit
方法(本を知っている人にとって、これはRaiseManの
Person
クラスで使用されている)、この例のように値で
NSString
を割り当てることについて思ったんだけど
- (id)init
{
if(![super init])
return nil;
myString = @"New entry";
return self;
}
この文字列は私によって割り当てられていないので、通常、私はそれを解放することを嫌うべきではありません。
BUT!この文字列のセッターメソッドではどうなりますか?
- (void)setMyString:(NSString *)newString
{
if(myString != newString) {
[myString release];
[newString retain];
myString = newString;
}
}
なぜ[myString release]
作品:メソッドは次のようになり、メモリ管理をすべき規則に従って?私はどこかで読んだことがある、= @"bla"
割り当てられた文字列で解放することはできません。
正しい方法で= @"bla"
で初期化していますか?または代わりにalloc
とinit
を使用する必要がありますか?任意の助け
感謝:)
残念ながら、保持とコピーの間違いを申し訳ありません、それは確かに私のコメントに保持する必要があります!だから、私が与えたinitメソッドのようないくつかのオブジェクトを作成すると、膨大な量の文字列ができなくなります。 (=メモリリーク?)編集:ああ、あなたのリンクでこれの答えを見つけました。ありがとう! –