我想知道一个对象被自动释放了多少次.我已经使用了足够长的目标c,通常可以直接知道某个对象是否已经自动释放,但是我经常会看到处理内存和保留计数的问题.在某些时候,答案总是结束,"你不能相信一个对象的retainCount" - 我同意这一点,但如果你能确定一个对象被自动释放的次数,那么你真的可以信任 retainCount如果你添加了像这样的类别:
@interface NSObject (NSObject_MemoryDebugging)
- (NSUInteger) autoReleaseCount;
- (NSUInteger) retainCountWithAutoRelease;
@end
@implementation]
/** Determine how many times this object has been marked for autorelease **/
- (NSUInteger) autoReleaseCount;
{
// ??? not sure how to figure this out.
return 0;
}
- (NSUInteger) retainCountWithAutoRelease
{
NSUInteger retainCount = [self retainCount];
NSUInteger autoReleaseCount = [self getAutoReleaseCount]; // ???
return retainCount - autoReleaseCount;
}
@end
Run Code Online (Sandbox Code Playgroud)
对于不可变类型仍然存在异常,因为这些通常会在复制期间增加保留计数,因此您仍然无法信任retainCount.
我不是在生产代码中使用retainCount来寻求此答案.但是,我可以看到这对于调试内存问题的人来说很有价值.
我想有些人会讨厌这个问题,因为程序员不应该关心对象被自动释放的次数.编码应该是关于平衡分配,保留,复制,新版本和故事结束.然而,重点是帮助人们敲打头脑. [NSObject retainCount]烧了很多人,这个问题的答案会很酷.
我确定有一种方法可以确定一个对象被自动释放的次数.我只是不知道它是什么,因此问题.
看到类似的问题:Objective-c中NSAutoreleasePool内的对象.
谢谢大家的答案.你可能会发现这个有趣的=> …
我有一个NSArray充满了NSDictionary对象,每个NSDictionary里面都有一个唯一的ID.我想根据ID查找特定字典,并在我自己的字典中获取该字典的所有信息.
myArray包含:
[index 0] myDictionary object
name = apple,
weight = 1 pound,
number = 294,
[index 1] myDictionary object
name = pear,
weight = .5 pound,
number = 149,
[index 3] myDictionary object (etc...)
Run Code Online (Sandbox Code Playgroud)
我想得到第二个字典对象的名称和重量(我不知道对象的索引...如果只有两个字母,我可以从中制作一个字典[myArray objectAtIndex:1])
所以,比方说我知道数字149.我怎样才能将myArray中的第二个myDictionary对象变成一个新的NSDictionary?