私はiPhoneアプリケーションをプログラミングしています。自分のメソッドの1つでメモリ管理に関する質問がありました。私はまだ手作業でメモリを管理するのがちょっと新しいので、この質問が初心者に見えるのならごめんなさい。Objective-Cメソッドの適切なメモリ管理
以下は、数字パッドがタグに基づいてラベルにボタンを配置できるように設計された方法です。この方法でボタンごとにメソッドを作成する必要はありません。このメソッドはうまくいきますが、私が関数内で作る変数を解放するのかどうかは疑問です。
変数を解放しようとするとアプリケーションがクラッシュするため、メモリに関する私の責任について少し混乱します。
FYI変数firstValueは私のラベルであり、それはこの方法で宣言されていない唯一の変数です:
ここに方法があります。
-(IBAction)inputNumbersFromButtons:(id)sender {
UIButton *placeHolderButton = [[UIButton alloc] init];
placeHolderButton = sender;
NSString *placeHolderString = [[NSString alloc] init];
placeHolderString = [placeHolderString stringByAppendingString:firstValue.text];
NSString *addThisNumber = [[NSString alloc] init];
int i = placeHolderButton.tag;
addThisNumber = [NSString stringWithFormat:@"%i", i];
NSString *newLabelText = [[NSString alloc] init];
newLabelText = [placeHolderString stringByAppendingString:addThisNumber];
[firstValue setText:newLabelText];
//[placeHolderButton release];
//[placeHolderString release];
//[addThisNumber release];
//[newLabelText release];
}
最後の4行がコメントアウトされていてもアプリケーションはうまく動作しますが、ここでこれらの変数を解放する必要があるようです。もし私がそれについて間違っていたら、関数で宣言された変数をいつリリースする必要があるのか、そうでないのかについての簡単な説明を歓迎します。ありがとう。
ああ、ありがとう、ありがとうございます。ちょうど不思議なことに、いつautoreleaseプールが解放されるのですか?これがすべてのプログラムに固有の質問であれば、本当に重要ではありません。 – Justin
@ジャスティン:申し訳ありませんが、あなたのコードを実際に見るために 'release'という質問に答えるのは早すぎました。いくつかの問題がありましたが、私は答えにきれいなバージョンを追加しました。 – mvds
autoreleaseプールは、現在の実行ループの最後に "将来のある時点で"排水されます。これを見るための最も簡単な方法は、中括弧の間のものはすべて問題ありませんが、中括弧の外側で使用したい場合は、それを保持する必要があります。 – MCannon