objective-c - NSMutableDictionary 内容发布?

标签 objective-c memory-management

我的类方法中有以下代码用于测试:

NSMutableDictionary * temp = [[NSMutableDictionary alloc] init];
[temp setObject:@"4" forKey:@"Interval"];
interval = [temp objectForKey:@"Interval"];
[temp release];

interval 是我的实例变量:

NSString * interval;

和它的 getter 方法(它不是属性):

- (NSString *) getInterval {
   return interval;
}

在其他一些类中,我尝试像这样使用方法 getInterval:

NSString * test = [MyObject getInterval];

getInterval 返回正确的 4 值,我在调试器中看到了它。我无法理解,因为据我所知,指向区间实例变量的指针应该随 NSMutableDictionary temp 一起释放。为什么会这样?

最佳答案

@"4" 是一个文字/常量 NSString 对象,而文字/常量 NSStrings 永远不会被释放——这就是为什么你可以仍然引用该字符串,即使它在理论上应该已经发布(假设字典是唯一的所有者)。

当然,这并不意味着您不应该遵循正确的内存管理规则。如果你想保留 interval 那么你应该保留或复制它,可能通过声明的属性。

关于objective-c - NSMutableDictionary 内容发布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6278291/

相关文章:

iphone - 获得开发者证书的流程

java - 指定使用引用初始化类和不使用引用初始化类之间的区别

c++ - 我应该如何为 c 字符串 char 数组分配内存?

objective-c - 通过菜单项显示的窗口设置不正确?

objective-c - UITableView - 当滚动太快时,最后一个单元格的内容会替换第一个单元格

ios - 这曾经有效 : Displaying image using imageWithContentsOfFile

php - 如何防止大型 Apache/PHP 文件上传失败?

ios - 保存照片到相册iOS,不要全部保存

c# - new List<T>() 和 new List<T>(0) 有区别吗

C 管理函数临时动态内存的有效方法