Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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
Objective c 目的-c释放_Objective C_Release_Release Management_Retaincount - Fatal编程技术网

Objective c 目的-c释放

Objective c 目的-c释放,objective-c,release,release-management,retaincount,Objective C,Release,Release Management,Retaincount,我在DNS.h中有这个类 @interface DNS : NSObject <NSXMLParserDelegate, NSNetServiceDelegate> { NSMutableArray *servsPublished; } @property(nonatomic, retain) NSMutableArray *servsPublished; 也许第一个想法是nil,但实际上我在方法中使用它检查是否为nil,然后释放它 这与保留财产有关吗? THX 首先,运

我在DNS.h中有这个类

@interface DNS : NSObject <NSXMLParserDelegate, NSNetServiceDelegate> {
     NSMutableArray *servsPublished;
}
@property(nonatomic, retain) NSMutableArray *servsPublished;
也许第一个想法是nil,但实际上我在方法中使用它检查是否为nil,然后释放它

这与保留财产有关吗?
THX

首先,运行构建和分析。静态分析器非常擅长指出某些类型的内存管理问题


其次,除非您在dealloc中,否则您可能不想直接在servsPublished上调用release。相反,请使用self.servsupblished=nil。这将正确释放对象并将相应的ivar设置为nil。

不要释放for循环中的服务。您没有在此处创建它们(没有alloc/new/copy),因此不应该释放它们。当您释放servToPublish时,所有内容都将自动释放,但如果您在循环中释放它们,将导致发送太多的发布消息


在这种情况下,释放
client
是正确的,因为您分配了它。

释放nil不会产生问题-显然,您可以向nil发送任何消息。你能把代码贴在初始化的地方和释放servsupblished变量的地方吗?把代码贴在释放“it”@Robot的地方,是的,我说了什么不同的话吗?你没有。我误读了你的评论。对不起,我刚刚用释放ServTopPublish属性的方法编辑了我的问题
-(void) parserDidEndDocument:(NSXMLParser *)parser {
    NSNetService *client;
    for (NSDictionary *aService in servToPublish) {
        client = [[NSNetService alloc] initWithDomain:@"local" 
                                             type:[aService objectForKey:@"serviceType"] 
                                             name:[aService objectForKey:@"name"] 
                                             port: [(NSNumber *)[aService objectForKey:@"port"] intValue]];

        [client setDelegate: self];
        [client publish];

        //release this service and the client
       [aService release];
       //[client release];
   }

   //free the array of Dictionary containing the services
   [servToPublish release];
}