0

これが私のコードです:

    - (void)viewDidLoad{
[super viewDidLoad];

self.authorList = [[NSArray alloc] 
                   initWithObjects:@"Christie, Agatha", 
                   @"Archer, Jeffrey", nil];

self.title = @"Authors";

}

配列 authorlist を割り当てて初期化している行でメモリ リークが発生しています。autorelease を authorlist に追加しようとしましたが、「Object sent- autorelease sent too many times」と表示されます。私はまだメモリ管理を学んでいます。

グラシアス。

4

4 に答える 4

5

のセッター メソッドauthorListは配列を保持するため、呼び出した直後に解放する必要があります。

NSArray *list = [[NSArray alloc] 
                initWithObjects:@"Christie, Agatha", 
                @"Archer, Jeffrey", nil];
self.authorList = list;
[list release];

または、自動解放することもできます:

self.authorList = [[[NSArray alloc] 
                   initWithObjects:@"Christie, Agatha", 
                   @"Archer, Jeffrey", nil] autorelease];
于 2012-07-09T08:46:36.850 に答える
0

あなたのクラスに dealloc メソッドを書きましたか?

ARC を使用していない場合 http://cocoa-touch.blogspot.ie/2008/09/memory-management-on-iphone.html

于 2012-07-09T08:45:30.693 に答える
0

これを使って

 self.authorList = [[[NSArray alloc] 
               initWithObjects:@"Christie, Agatha", 
               @"Archer, Jeffrey", nil] autorelease];
于 2012-07-09T08:53:21.730 に答える
0

プロパティ オブジェクトを直接割り当てないでください。

次のように割り当てる必要があります。

 - (void)viewDidLoad{
      [super viewDidLoad];

       NSArray *tempArray = [[NSArray alloc] 
               initWithObjects:@"Christie, Agatha", 
               @"Archer, Jeffrey", nil];
       self.authorList = tempArray;
       [tempArray release];


      NSString *titleString = @"Authors";
      self.title = titleString;
      [titleString release];
 }
于 2012-07-09T08:48:56.933 に答える