2011-08-24 83 views
2

通常我做这样的事情(见下文)中获取价值,我需要:我必须保留/释放从NSDictionary中取得的值吗?

NSDictionary *state = [notification.userInfo objectForKey:@"state"]; 
[self.tabBarItem setBadgeValue:[state objectForKey:@"short"]]; 

但不值得做保留从NSDictionary中取值/释放?类似这样的:

NSDictionary *state = [[notification.userInfo objectForKey:@"state"] retain]; 
[self.tabBarItem setBadgeValue:[state objectForKey:@"short"]]; 
[state release]; 

是否更加记忆友好?或者我不应该打扰,只是相信自动释放池来完成它的工作?

回答

3

不,这样做没有意义。 [notification.userInfo objectForKey:@"state"]的结果始终是一个自动释放对象;如果添加额外的retainrelease,那不会改变任何内容。

+0

那么它不会加速释放'state'?为什么我想到这个 - 我看到一些文章告诉我们避免使用'autorelease'变量。如果可能的话,手动释放它们。这就是为什么我想到它...... – NilColor

+1

@NilColor是的,有时避免autoreleased变量可以提供速度增加(虽然通常不是很多)。但我的观点是,在这种情况下你无法避免它,'-objectForKey:'将始终返回一个自动释放对象。所以只是不要担心:) – jtbandes

相关问题