NSArray initWithObjects:内存泄漏

时间:2012-07-09 08:41:34

标签: iphone objective-c

这是我的代码:

    - (void)viewDidLoad{
[super viewDidLoad];

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

self.title = @"Authors";

}

我在分配和初始化数组作者列表时遇到内存泄漏。我试图将autorelease放在作者列表上,但它说“对象发送 - 自动释放发送了太多次”。我还在学习记忆管理。

格拉西亚斯。

4 个答案:

答案 0 :(得分:5)

authorList的setter方法将保留数组,因此您需要在调用后立即释放它:

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];

答案 1 :(得分:0)

你在课堂上写过dealloc方法吗?

如果您没有使用ARC http://cocoa-touch.blogspot.ie/2008/09/memory-management-on-iphone.html

答案 2 :(得分: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];
 }

答案 3 :(得分:0)

使用此

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