相关疑难解决方法(0)

如何判断对象是否在NSAutoreleasePool中

我想知道一个对象被自动释放了多少次.我已经使用了足够长的目标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内的对象.

编辑


谢谢大家的答案.你可能会发现这个有趣的=> …

memory-leaks objective-c nsautoreleasepool ios retaincount

8
推荐指数
2
解决办法
2564
查看次数

在NSArray中获取NSDictionary中的所有值

我有一个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?

iphone objective-c nsdictionary nsarray

5
推荐指数
1
解决办法
3422
查看次数