3

viewDidUnload を適切に使用しているかどうかはわかりません。.h ファイルで宣言したすべてのものをリリースする必要がありますか?

これが私が今やっている方法です:

@property (strong, nonatomic) Readability *wrapper;
@property (strong, nonatomic) ArticleModel *article;
@property (strong, nonatomic) Woho *wohoItem;
@property (strong, nonatomic) FeedItem *item;
@property (unsafe_unretained, nonatomic) IBOutlet UIScrollView *scrollView;
@property (strong, nonatomic) NSMutableArray *picturesArray;
@property (unsafe_unretained, nonatomic) IBOutlet UILabel *headTitleLabel;

そしてviewDidUnloadで:

- (void)viewDidUnload
{
    [self setHeadTitleLabel:nil];
    [self setScrollView:nil];
    self.picturesArray = nil;
    self.item = nil;
    self.article = nil;
    self.wohoItem = nil;
    self.wrapper = nil;
}

これは正しいことですか?

私のアプリはすべてのメモリ警告でクラッシュするため、おそらくそうではありません。

ありがとう!

4

2 に答える 2

3

メモリ不足の警告が発生すると、UIViewController後で再読み込みまたは再作成できることがわかっている場合、クラスはそのビューを消去します。これが発生した場合は、 メソッドviewWillUnloadviewDidUnloadメソッドも呼び出して、ビュー階層に関連付けられているすべてのオブジェクトの所有権を放棄する機会をコードに与えます。これには、nib ファイルからロードされたオブジェクト、viewDidLoad メソッドで作成されたオブジェクト、および遅延して作成されたオブジェクトが含まれます。ランタイムに追加され、ビュー階層に追加されます。

于 2012-09-15T11:12:47.193 に答える
1

developer.appleは言う:

ビューコントローラがメモリ警告(didReceiveMemoryWarning)を受信すると、現在必要ではなく、必要に応じて後で再作成できるリソースの所有権を放棄する必要があります。そのようなリソースの1つは、ビューコントローラーのビュー自体です。スーパービューがない場合、ビューは破棄されます(didReceiveMemoryWarningの実装では、UIViewControllerは[self setView:nil]を呼び出します)

プログラミングガイドはこちら

-(void)viewDidUnloadですべてのIBOutletsをnilに設定します。iOS 5を使用している場合は、IBOutletsの「弱い」参照を使用することをお勧めします。

各iterface要素のControl-DragをNIB(xib)またはStoryboardからインターフェイスコードに作成することをお勧めします。すべてのフィールドが生成されます。

于 2012-09-15T12:21:59.940 に答える