Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 目标C泄漏_Iphone_Objective C_Ios_Memory Leaks - Fatal编程技术网

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);
}