0

这是我的代码:

    - (void)viewDidLoad{
[super viewDidLoad];

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

self.title = @"Authors";

}

我在分配和初始化数组作者列表的行出现内存泄漏。我试图将 autorelease 放在 authorlist 上,但它说“对象已发送 - autorelease 发送了太多次”。我还在学习内存管理。

格拉西亚斯。

4

4 回答 4

5

setter 方法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

您不应该直接分配属性对象。

你应该这样分配:

 - (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 回答
0

用这个

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