在自动释放池 内释放创建的自动释放对象 [关闭]
Posted
技术标签:
【中文标题】在自动释放池 内释放创建的自动释放对象 [关闭]【英文标题】:release outside created autoreleased object inside a autoreleasepool [closed]在自动释放池 内释放创建的自动释放对象 [关闭] 【发布时间】:2013-05-07 22:28:03 【问题描述】:如何强制自动释放池释放我在自动释放池之外创建的自动释放对象
我正在使用的代码
- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection
NSError *error = nil;
id response = [NSJSONSerialization JSONObjectWithData:responseData options:nil error:&error];
[responseData release];
if (error)
NSLog(@"ERROR JSON PARSING : %@", error.localizedDescription);
[delegate databaseUpdates:response connection:self];
- (void)databaseUpdates:(id)_updates connection:(URLConnection *)_urlConnection
if (_updates)
NSDictionary *updates = nil;
@autoreleasepool
updates = [[_updates valueForKey:@"objects"] retain];
//Release _updates here!?!
非常感谢
【问题讨论】:
【参考方案1】:只需在自动释放池范围内调用autorelease
,就会自动将对象添加到池中。不过,看起来您正在尝试在这里解决错误的问题。如果你的意思是_updates
,那么这不应该是方法的内存管理,而是调用者的内存管理(它已经是!JSONObjectWithData:options:error:
已经返回一个自动释放的实例),如果你的意思是updates
,那么,简单不要保留它。
【讨论】:
谢谢,我会尝试在我的 autoreleasepool 中调用 autorelease on _updates。 @user1839842:不,JustSid 是你不应该release
或autorelease
_updates
。你不会发布你没有保留在那个范围内的东西。
我找到了另一种方法来减少我的内存警告问题。我删除了 databaseUpdates: 方法中的自动释放池。 _updates 对象将在 databaseUpdates: 方法结束时被删除。感谢您的帮助!【参考方案2】:
这是不可能的。我想你需要这个
- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection
@autoreleasepool
NSError *error = nil;
id response = [NSJSONSerialization JSONObjectWithData:responseData options:nil error:&error];
[responseData release];
if (error)
NSLog(@"ERROR JSON PARSING : %@", error.localizedDescription);
[delegate databaseUpdates:response connection:self];
// response will be released here
【讨论】:
以上是关于在自动释放池 内释放创建的自动释放对象 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章