当前位置:  开发笔记 > IOS > 正文

[NSMutableDictionary setValue:value forKey:key]是否保留NSString键?

如何解决《[NSMutableDictionarysetValue:valueforKey:key]是否保留NSString键?》经验,为你挑选了1个好方法。

NSMutableDictionary使用该setValue:forKey:方法添加项目时(我认为这概括为任何NSObject),字典是否保留第二个参数,NSString

例如:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
NSString *theString = @"hello";
int i;
for (i=0; i<[theString length]; i++){
    NSNumber *myInt = [NSNumber numberWithInt:i];
    NSString *character = [NSString stringWithFormat:@"%C",[theString characterAtIndex:i]];
    [dict setValue: myInt forKey:character];
}
[dict release];
[pool release];

显然,没有理由myInt在循环中释放它,dict因此它在代码结束之前无法释放.但是同样如此character吗?我的想法是,如果NSMutableDictionary以其他方式存储字符串,那么可以在循环周围创建一个临时池并释放这些字符串,而不是等到字典的发布.

我也很好奇,为什么retainCountcharacter是7FFFFFFF,就好像它是一个NSConstantString,我希望stringWithFormat返回一个NSString对象,它需要保留,但似乎并不如此.



1> Alex..:

在Cocoa中NSString,要复制参数而不是保留参数是很常见的.那是因为你可以很容易地给字典一个实例NSMutableString.因为字符串的值可能会更改,NSDictionary所以复制.

但是,无论NSMutableDictionary实际操作如何,您都不必担心是否character需要保留.一旦你把它NSMutableDictionary作为一个参数传递给它,确定如何存储数据真的是那个类的问题,除非文档特别告诉你保留对象是你的责任.

我也不会过分担心retainCount任何对象.在对象的保留计数过于紧密之后,可能会导致您跌落兔子洞,这会让您旋转车轮.

最后,我真的认为你不需要在这里创建自己的自动释放池.除非你绝对肯定地知道这theString将会很长,或者你已经观察到仪器中的高内存利用率,否则添加自动释放池是不必要的优化.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有