即使属性设置为保留,也会出现BAD ACCESS错误

时间:2009-09-08 14:34:04

标签: iphone

我希望有人能告诉我为什么我错了。以下是我的代码片段:

TimeLogAppDelegate *appDelegate = (TimeLogAppDelegate *)[[UIApplication sharedApplication] delegate];

PickFromListViewController * pl = [[PickFromListViewController alloc] initWithNibName:@"PickList" bundle:nil];
pickList = pl;
[pickList setSearchItems:[appDelegate tableListMutableArray:type ] :NSLocalizedString(type,nil)];
pickList.callingViewController = self;
[pl release];
pickList.responseSelector = [[type lowercaseString] stringByAppendingString: @"Selected:"];
pickList.includeNone = YES;
pickList.includeNew = YES;
[self.navigationController pushViewController:pickList animated:YES];

正如你所看到的,我正在中途发布pl,只是为了解决这个问题。 'pickList'显然是一个PickFromListViewController并在Header中声明。我将其设置为属性(@property(非原子,保留)PickFromListViewController * pickList;)并且我@synthesize它。

我的问题是:

在pl发布之后,我得到一个BAD ACCESS错误,访问pickList,指示指针不再可用,但我认为pickList是合成的,它会被保留,直到我在dealloc发布它?

有人可以告诉我为什么我错了吗?

非常感谢

1 个答案:

答案 0 :(得分:2)

pickList属性设置为(nonatomic, retain)仅适用于通过属性访问者访问该属性的情况,如下所示:

self.pickList = P1;

[self setPickList:P1];

如果只是为成员变量赋值:

pickList = P1;

您正在绕过属性访问器方法,因此不会发送retain消息。