这是我的示例代码....我正在创建类对象作为NSDictionary.Here它显示泄漏,我释放该对象,它是不是正确的位置来释放这个对象? 我该如何发布这个对象。 TanX提前。
NSDictionary *locationDictionary = [[CJSONDeserializer alloc]deserializeAsDictionary:webresponse error:nil];
NSArray *placemarkArray = [locationDictionary valueForKey:@"Placemark"];
NSDictionary *tempDictionary = [placemarkArray objectAtIndex:0];
NSDictionary *pointDictionary = [tempDictionary valueForKey:@"Point"];
NSArray *coordinateArray = [pointDictionary valueForKey:@"coordinates"];
NSNumber *numberLongitude = [coordinateArray objectAtIndex:0];
NSNumber *numberLatitude = [coordinateArray objectAtIndex:1];
答案 0 :(得分:2)
CJSONDeserializer类具有方便的构造函数。所以使用它。
CJSONDeserializer *jsonDeserializer = [CJSONDeserializer deserializer];
使用该对象反序列化。
NSDictionary *locationDictionary = [jsonDeserializer deserializeAsDictionary:webresponse error:nil];
所以你不需要发布它。
答案 1 :(得分:1)
您正在CJSONDeserializer上调用alloc,因此您拥有它。完成后,您需要释放它。我没有看到你在上面发布释放。
变量的其余部分是通过不调用alloc,copy,new或mutableCopy获得的,因此您不拥有它们。它们已经自动发布。这就是惯例。
这是必读的:
具体来说,规则:
您拥有自己创建的任何对象 使用名称以“alloc”,“new”,“copy”或“mutableCopy”开头的方法创建对象(例如,alloc,newObject或mutableCopy)。
您可以使用保留获取对象的所有权 通常保证接收到的对象在接收到的方法中保持有效,并且该方法也可以安全地将对象返回给其调用者。在两种情况下使用retain:(1)在accessor方法或init方法的实现中,获取要存储为对象属性的对象的所有权; (2)防止对象因某些其他操作的副作用而失效(如“避免导致重新分配您正在使用的对象”中所述)。
当您不再需要它时,您必须放弃您拥有的对象的所有权 您通过向对象发送释放消息或自动释放消息来放弃对象的所有权。因此,在Cocoa术语中,放弃对象的所有权通常被称为“释放”对象。
您不得放弃您不拥有的对象的所有权 这只是之前明确规定的政策规则的必然结果。
答案 2 :(得分:0)
如果你刚好在号码之后。和numberLat。保留它们直到你完成它们。 如果您不再需要locationDictionary作为一个整体,您现在可以[locationDitionary release],但只有在保留或完成您需要的内容后才能使用。