【发布时间】:2011-09-23 14:02:37
【问题描述】:
我使用 Instruments 中的泄漏工具测试代码,但泄漏工具似乎找不到泄漏。
在我的代码末尾,NSLog(@"str count:%d",[str retainCount]); 的输出是 3。为什么?我不覆盖dealloc。 [a.name retainCount] 只有一次
我只自动释放 str 一次。所以 str 不应该泄漏。
@interface DataMode : NSObject {
NSString * name;
}
@property (retain) NSString * name;
- initWithName:(NSString * )name_;
@end
@implementation DataMode
@synthesize name;
- initWithName:(NSString * )name_
{
if ([super init] != nil)
{
name = name_;
return self;
}
return nil;
}
@end
- (void) pressed:(id)sender
{
for( int i = 0;i<10000000;i++)
{
NSString * str = [NSString stringWithFormat:@"zhang"];
DataMode * a = [[DataMode alloc] initWithName:str];
NSLog(@"a0 count:%d",[a retainCount]);
NSLog(@"name1 count:%d",[a.name retainCount]);
NSLog(@"name1 count:%d",[a.name retainCount]);
NSLog(@"a1 count:%d",[a retainCount]);
[ a release];
NSLog(@"str count:%d",[str retainCount]);
NSLog(@"str count:%d",[str retainCount]);
}
}
@end
【问题讨论】:
-
您在发布问题时遇到了什么麻烦?也许我们可以帮忙。
-
另外,不鼓励调用
-retainCount,并且在 NSStrings 上尤其无用。我相信很快就会有人来解释。 -
附带说明,您应该在初始化方法中复制或至少保留分配给
nameivar 的字符串对象。 -
您在使用 ARC 吗?垃圾收集?手动内存管理?
-
retainCount 不会在 ARC 中编译,
retainCount在 GC 中有效返回self.... 必须是手动的。
标签: iphone objective-c memory memory-leaks