gpt4 book ai didi

iphone - 关于添加到数组的对象中对象的保留计数问题,Obj-C

转载 作者:行者123 更新时间:2023-12-03 20:36:53 25 4
gpt4 key购买 nike

我正在开发一个 iPhone 应用程序,并且有一个关于内存管理的问题。假设我有一个名为 Company 的类,其中有一个名为 IdNSNumber 属性(nonatomic,retain)。我这样做:

Company *company = [[Company alloc] initWithId:[NSNumber numberWithInt:1]];

Id 现在的保留计数应该为 1?然后我这样做:

NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:company];
[company release];

现在 Id 的保留计数是多少?还是1?我应该补充一点,在 Companydealloc 方法中,我执行了[self.Id release]。问题是,当我在应用程序中执行此操作并稍后尝试访问 [[array objectAtIndex:0] Id] 时,它超出了范围。从我的角度来看,数组保留了公司,因此我应该能够“通过”数组访问Id。这是正确的吗?

编辑:忘了说,当我从 Company 中删除 [self.Id release] 时,应用程序可以正常工作,如果它在那里,它就会崩溃......

谢谢!

最佳答案

首先,不要将保留计数视为特定数字。将保留视为增量;您仅增加或减少保留计数。

回答您的具体问题:

What will the retain count on Id be now? Still 1? I should add that in the dealloc method in Company I do [self.Id release]. The problem is that when i do this in my app and later try to access [[array objectAtIndex:0] Id] it is out of scope. From my point of view the array retains company and therefore I should be able to access Id "through" the array. Is this correct?

Id的保留计数是一个实现细节; NSNumber 缓存了一小部分值,因此,如果您考虑绝对值的保留计数,则保留计数可能是与您可能期望的任何值完全无关的值。

如果您在平衡所有保留与释放后尝试访问对象,则说明您没有正确遵循内存管理准则。

假设您的“公司”实例保留 NSNumber 的实例,那么它应该仍然可行。 “超出范围”是什么意思?您有运行时或编译器错误吗?如果你愿意的话,请发布它。

关于iphone - 关于添加到数组的对象中对象的保留计数问题,Obj-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com