私は私の.hファイルで私ののUIViewControllerこのように定義にUIScrollViewのを持っている:私はことを読ん私の財産は潜在的なリークであり、どうすれば解決できますか?
@synthesize imageScrollView = _imageScrollView;
:
#import <UIKit/UIKit.h>
@interface TestViewController : UIViewController <UIScrollViewDelegate>
@property (nonatomic, retain) UIScrollView * imageScrollView;
@end
はその後、私の.mファイルで、私は次のことを持っていますこれは自動的に私が通常は.hファイルに入力する_imageScrollViewを作成しますか? (UIScrollView * _imageScrollView)
私の.hファイルから重複したコードを削除するので、好きです。
Potential leak of an object allocated on line #linenumber
:ビルドのXcodeは私にこれを言った後に今
- (void)dealloc
{
[_imageScrollView release], _imageScrollView = nil;
[super dealloc];
}
:
self.imageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 480.0 - 20.0 - 49.0)];
[_imageScrollView setDelegate:self];
[_imageScrollView setPagingEnabled:YES];
[_imageScrollView setBounces:NO];
[_imageScrollView setShowsHorizontalScrollIndicator:NO];
[_imageScrollView setShowsVerticalScrollIndicator:NO];
[_imageScrollView setContentSize:CGSizeMake(320.0 * 3.0, 480.0 - 20.0 - 49.0)];
そしてにdeallocリリースとはnilで:今私のloadViewメソッドに私が残りを行い
これは私がこれを変更すると消えます:
これにself.imageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 480.0 - 20.0 - 49.0)];
:
self.imageScrollView = [[[UIScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 480.0 - 20.0 - 49.0)] autorelease];
なぜ私は私がのdeallocでそれを解放していたときにこれを自動解放する必要がありますか?私は間違って何をしていますか?
このメモリの警告は、あなたのimageScrollView
プロパティはretain
財産であると宣言されているため
ああ、それは今私には意味があります(私はここに入力することはできないようです)どうすれば自動解除を避けることができますか?それとも、この場合の唯一のオプションですか?通常、私は一時的なオブジェクトを作成するとき、私はそれを終了した直後にそれをリリースします。おそらく一度だけそれを保持する方法があるときに、このようなものでオートリリースプールを埋めることは悪いことではありませんか? –
ここではオートレリーズが最適です。 autoreleaseプールが遅くなることは事実ですが、問題のコードが文字通り何千回も呼び出された場合に限ります。タイトなループでたくさんのものを割り当てていた場合は、新しいビューを指すように一時変数を作成し、それにimageScrollViewを設定して、temp変数でreleaseを呼び出すことができます。そうすることで、リリース前に設定できるので、自動解除する必要はありません。 (ただし、あなたが気づいていない場合にのみ) – andyvn22
UIScrollView * imageScrollView = [[UIScrollView alloc] init]; [self setImageScrollView:imageScrollView]; [imageScrollView release];アプリは遅くない(または私はそれに気づいていない)が、将来のプロジェクトのために私はちょうどこれを明確にしたい(しかし、それは今だと思う、もう一度ありがとう!) –