消息发送到deallocated instance ,,, [__ NSArrayI respondsToSelector:]

时间:2012-07-15 09:19:23

标签: objective-c ios memory-management

我有一个带有NSArray对象userIDs

的实现文件
NSArray *userIDs;
NSInteger friendID;

@implementation TableViewController

-(void)reciveFriendsIDs:(NSArray *)array
 {
userIDs = [NSArray arrayWithArray:array];
 }

-(NSString *)getFriendId
{
 return [userIDs objectAtIndex:friendID];
}
.
.
.
@end

并且方法-(NSString *)getFriendId从另一个类中调用它:

TableViewController *tableController = [[TableViewController alloc]init];
NSString *fid = [tableController getFriendId];

但我有一个错误说" - [__ NSArrayI respondsToSelector:]:消息发送到解除分配的实例0x20320200"并且编译器在此行中指出错误:

return [userIDs objectAtIndex:friendID];

2 个答案:

答案 0 :(得分:10)

您正在使用arrayWithArray静态方法分配NSArray。

通过这种方式,它会被添加到自动释放池中,并且保留计数将为0。 保留它或用[[NSArray alloc] init]

手动分配它

答案 1 :(得分:0)

我在线上获得了同样的例外

 if(self.arrTypes != nil)

在代码中的其他位置使用以下行的原因

 [self.arrTypes release];

并用

替换此代码
 self.arrTypes = nil;

解决了这个问题。