Iphone 目标C泄漏
谁能告诉我为什么这个方法会给我带来漏洞?我看了很久,弄不明白它为什么会漏水。泄漏的对象是Iphone 目标C泄漏,iphone,objective-c,ios,memory-leaks,Iphone,Objective C,Ios,Memory Leaks,谁能告诉我为什么这个方法会给我带来漏洞?我看了很久,弄不明白它为什么会漏水。泄漏的对象是ContactOperations。事件类型为Malloc和Release。我想init可能是错的 联系控制器 ContactOperations *contactOps = [[ContactOperations alloc] initWithDatabase:database]; if ([contactOps applicationIsOwner]) [contactOps startOpera
ContactOperations
。事件类型为Malloc和Release。我想init
可能是错的
联系控制器
ContactOperations *contactOps = [[ContactOperations alloc] initWithDatabase:database];
if ([contactOps applicationIsOwner])
[contactOps startOperations];
[contactOps release];
仪器显示alloc给了我漏洞
联系操作
ContactOperations
- (id)initWithDatabase:(Database*)aDatabase
{
if (self = [super init])
{
database = [aDatabase retain];
parameter = [[Parameter alloc] init];
parameter.database = aDatabase;
//addressBook = ABAddressBookCreate();
}
return(self);
}
-(void)dealloc
{
[database release];
[parameter release];
//CFRelease(addressBook);
}
您忘记了[super dealoc]代码>在-(void)dealloc
的末尾。您必须调用[super dealloc]
以清除ContactOperations超类的实例变量
您忘记了[super dealoc]代码>在-(void)dealloc
的末尾。您必须调用[super dealloc]
才能清除ContactOperations超类的实例变量。您是否尝试过从Xcode内部进行静态分析?contactOps
是否保留在-[ContactOperations startOperations]
中的某个位置?除此之外,您发布的代码中没有泄漏。愚蠢的问题:如果您在发布后将contactOps
设置为nil
,它还会发出警告吗?如果没有,从技术上讲,您的代码仍然可以访问一个过度扩展的实例。@trojanfoe-静态分析找不到任何东西。@Costique它没有保留这是它使用的唯一方式。您是否尝试过从Xcode内部进行静态分析?是否在-[ContactOperations startOperations]
中的某个位置保留了contactOps
?除此之外,您发布的代码中没有泄漏。愚蠢的问题:如果您在发布后将contactOps
设置为nil
,它还会发出警告吗?如果没有,从技术上讲,您的代码仍然可以访问一个过度扩展的实例。@特洛伊敌人-静态分析找不到任何东西。@Costique未保留它这是使用它的唯一方法。对。当使用引用计数而不是垃圾收集器时,这是必需的。我是如此的消磨和伟大。我在这上面浪费了好几个小时。当使用引用计数而不是垃圾收集器时,这是必需的。我是如此的消磨和伟大。我在这上面浪费了好几个小时。
-(void)dealloc
{
[database release];
[parameter release];
//CFRelease(addressBook);
}