iOS - 正在释放的对象?
Posted
技术标签:
【中文标题】iOS - 正在释放的对象?【英文标题】:iOS - Objects being released? 【发布时间】:2011-10-15 07:52:36 【问题描述】:我有以下代码:
Dummy *dummy = [[Dymmy alloc] initWithDictionary:dummyData];
DummyTableItem *dummyTableItem = [DummyTableItem itemWithDummy: dummy];
[_data addObject: dummyTableItem];
init函数如下:
+ (id) itemWithDummy: (Dummy *) dummy
DummyTableItem *item = [[[self alloc] init] autorelease];
item.dummy = dummy;
return item;
- (id) init
self = [super init];
if( self )
dummy = nil;
return self;
将 dummy 声明为(非原子,保留)
还有假人:
@synthesize name=_name;
- (id) initWithDictionary: (NSDictionary *) dictionary
self = [super init];
if( self != nil )
if( [dictionary objectForKey:@"name"] )
_name = [dictionary objectForKey:@"name"];
return self;
名称再次声明为(非原子,保留)
当我稍后尝试访问 dummyTableItem.dummy.name 以将其设置为 UILabel 时,我收到“-[CFString isEqualToString:]: message sent to deallocated instance 0x5b37a10”
我对保留的对象做错了什么吗?我在这里想念什么?同样在代码的第一部分中,我应该在将 dummyTableItem 添加到 _data 后释放它(这是一个 NSMutableArray?)
【问题讨论】:
【参考方案1】:这应该可以解决 Dummy 的 @implementation 内部的问题:
@synthesize name=_name;
- (id) initWithDictionary: (NSDictionary *) dictionary
self = [super init];
if (self)
_name = [[dictionary objectForKey:@"name"] retain]; //retain it :)
return self;
既然您将name
声明为retain,您应该拥有它(这就是为什么我在分配它时添加了retain
)。
此外,您无需检查if( [dictionary objectForKey:@"name"] )
,因为无论如何_name = [nil retain];
是nil
:)
【讨论】:
你也可以使用name
属性的setter:self.name = [dictionary objectForKey:@"name"];
以上是关于iOS - 正在释放的对象?的主要内容,如果未能解决你的问题,请参考以下文章