我在哪里发布这个对象。请帮帮我?

时间:2011-10-19 05:15:01

标签: iphone

这是我的示例代码....我正在创建类对象作为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];

3 个答案:

答案 0 :(得分:2)

CJSONDeserializer类具有方便的构造函数。所以使用它。

CJSONDeserializer *jsonDeserializer = [CJSONDeserializer deserializer];

使用该对象反序列化。

NSDictionary *locationDictionary = [jsonDeserializer deserializeAsDictionary:webresponse error:nil];

所以你不需要发布它。

答案 1 :(得分:1)

您正在CJSONDeserializer上调用alloc,因此您拥有它。完成后,您需要释放它。我没有看到你在上面发布释放。

变量的其余部分是通过不调用alloc,copy,new或mutableCopy获得的,因此您不拥有它们。它们已经自动发布。这就是惯例。

这是必读的:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

具体来说,规则:

您拥有自己创建的任何对象 使用名称以“alloc”,“new”,“copy”或“mutableCopy”开头的方法创建对象(例如,alloc,newObject或mutableCopy)。

您可以使用保留获取对象的所有权 通常保证接收到的对象在接收到的方法中保持有效,并且该方法也可以安全地将对象返回给其调用者。在两种情况下使用retain:(1)在accessor方法或init方法的实现中,获取要存储为对象属性的对象的所有权; (2)防止对象因某些其他操作的副作用而失效(如“避免导致重新分配您正在使用的对象”中所述)。

当您不再需要它时,您必须放弃您拥有的对象的所有权 您通过向对象发送释放消息或自动释放消息来放弃对象的所有权。因此,在Cocoa术语中,放弃对象的所有权通常被称为“释放”对象。

您不得放弃您不拥有的对象的所有权 这只是之前明确规定的政策规则的必然结果。

答案 2 :(得分:0)

如果你刚好在号码之后。和numberLat。保留它们直到你完成它们。 如果您不再需要locationDictionary作为一个整体,您现在可以[locationDitionary release],但只有在保留或完成您需要的内容后才能使用。