我不明白这个问题:
我有2个A类和B类,在A视图中我有两个Button,ButtonCreate和ButtonAccess。
在B中有这种方法:
-(NSDictionary *) returnData
{
NSDIctionary *data= [NSDictionary withObjectsAndKeys.....];
return data;
}
在A i中还有一个属性@property(nonatomic, retain) NSDictionary *dictio
,以及.m文件@synthesize dictio = _dictio
。
ButtonCreate IBAction - >
B *secondaryClass = [[B alloc] init];
_dictio = [[secondaryClass returnData] retain];
[B release];
ButtonAccess IBAction - >
NSString *value = [_dati ObjectForKey... ];
问题:如果我多次按下ButtonCreate,在Instruments中我看到内存泄漏,但如果我在ButtonCreate方法中切断“保留”,当我从ButtonAccess访问数据时,我发生了崩溃。
我真的不明白我该怎么办...你能帮助我吗?
非常感谢。
答案 0 :(得分:0)
您没有发布_dictio
的旧值,而您没有发布secondaryClass
B *secondaryClass = [[B alloc] init];
if (_dictio != nil)
[_dictio release];
_dictio = [[secondaryClass returnData] retain];
[secondaryClass release];
但是,既然您已将您的财产声明为保留,您可以利用该财产为您执行此操作。
B *secondaryClass = [[B alloc] init];
self.dictio = [secondaryClass returnData]; // sends retain to new, release to old
[secondaryClass release];
答案 1 :(得分:0)
在A中试试这个,我认为它可以解决你的问题:
ButtonCreate IBAction --> B *secondaryClass = [[B alloc] init];
self.dictio = [secondaryClass returnData];
[B release];
答案 2 :(得分:0)
看起来你正试图发布B,而不是你命名为secondaryClass的B实例。
B *secondaryClass = [[B alloc] init];
_dictio = [[secondaryClass returnData] retain];
[B release];
不应该是:
...
[secondaryClass release];