/ / UIActionSheetの終了後のリリース-ios、objective-c、uiactionsheet

UIActionSheetのリリース後のリリース - ios、objective-c、uiactionsheet

使っています UIActionSheet 私のプロジェクトでは:

self.actionSheet = [[[UIActionSheet alloc] initWithTitle:nil] autorelease];

これはオブジェクトです:

@property (nonatomic, retain) UIActionSheet *actionSheet;

そして後 UIActionSheet 解雇されて作りたい nil このコードで:

[self.actionSheet release];
self.actionSheet = nil;

しかし、それを行うとアプリがクラッシュしますが、なぜそれが起こるのでしょうか?

回答:

回答№1は2

手動で呼び出す release 問題です。プロパティの合成されたセッターを使用すると、以前のオブジェクトが適切に解放されます。

コードを次のように変更する必要があります。

self.actionSheet = nil;

または、手動で解放したい場合は、基になるインスタンス変数を nil、 そのようです:

[self.actionSheet release];
_actionSheet = nil;

コメントで提案されているように、コードをARCに移行する必要があります。すべてのコードを移行できない場合でも、ほとんどのコードを移行して、「問題のある」コードのみをMRCに保持できます。