3

私は小さな問題に直面しています、

.h ファイルで配列を宣言し、viewDodLoadメソッドで割り当てます。メソッドでは、配列がthendeallocと等しくないかどうかを確認します。しかし、iOS 5.1.1 でクラッシュします。このクラッシュの理由がわかりません。nilarray=nil

私のコード、

   @interface SampleApp : UIViewController
   {
        NSMutableArray *objArray;
   }
   @end

   @implementation SampleApp

   - (void)viewDidLoad
   {
        [super viewDidLoad]; 
        objArray=[[NSMutableArray alloc]init];
   }
   -(void)dealloc
   {
      [super dealloc];
      if (objArray!=nil)
     {
         [objArray removeAllObjects];
         [objArray release];objArray=nil;
     }
  }
4

3 に答える 3

3

メソッドの先頭ではなく[super dealloc];末尾に追加します。deallocこれは Appleのメソッドのドキュメントでdealloc推奨されています。

ARC を使用しない場合、dealloc の実装はスーパークラスの実装を最後の命令として呼び出す必要があります。

以下のようにコードを変更します。

   -(void)dealloc
   {
      if (objArray!=nil)
     {
         [objArray removeAllObjects];
         [objArray release];objArray=nil;
     }
      [super dealloc];
   }

[objArray removeAllObjects]また、配列全体を解放するときに呼び出す必要はありません。配列が解放されると、内部的にrelease含まれているすべてのオブジェクトが呼び出されます。

それが役立つことを願っています!

于 2013-08-26T06:42:53.910 に答える