我正在制作iPhone游戏.我想释放已分配或保留的所有对象.在dealloc我发布所有这些对象的函数中,但后来我意识到有时候我还没有分配对象时最终释放对象.所以我想retainCount在发布它之前我需要检查它是否大于零.
我的问题是:
我只是检查是否retainCount大于零,然后释放它?
if([bg retainCount]!=0)
{
[bg release];
}
Run Code Online (Sandbox Code Playgroud)
要么
我应该多次发布它 retainCount
while([bg retainCount]!=0)
{
[bg release];
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
在尝试打印retainCount对象后,我得到2147483647.为什么我得到这样的结果?它应该是1,不应该?
NSString *myStr = [NSString new];
NSUInteger retCount = [myStr retainCount];
NSLog(@"refCount = %u", retCount);
Run Code Online (Sandbox Code Playgroud)
2011-09-08 17:59:18.759测试[51972:207] refCount = 2147483647
我使用XCode版本4.1.尝试编译器GCC 4.2和LLVM GCC 4.2 - 相同的结果.垃圾收集选项设置为不受支持.
NSLog(@"first:%u",[object retainCount]);
[object release];
NSLog(@"second:%u",[object retainCount]);
Run Code Online (Sandbox Code Playgroud)
输出:
first:1 second:1
为什么对象不会被释放?
#define kTestingURL @"192.168.42.179"
...
NSString *serverUrl = [[NSString alloc] initWithString:
[NSString stringWithFormat:@"http://%@", kTestingURL]];
NSLog(@"retain count: %d",[serverUrl retainCount]);
Run Code Online (Sandbox Code Playgroud)
为什么保留计数为2而不是1?
可能重复:
NSString保留Count
是否有可能任何对象的保留计数为负值?
我有这个代码
NSString *str = [[NSString alloc] initWithString:@"Hello World"];
NSLog(@"String Retain Count: %i", [str retainCount]);
Run Code Online (Sandbox Code Playgroud)
这将返回保留计数 -1.
为什么会这样?
我也是这样做的
NSString *str = [[NSString alloc] init]
Run Code Online (Sandbox Code Playgroud)
仍然是保留计数中的返回负值.
这是怎么回事?
请帮忙了解这件事!!!!!
我有以下代码:
NSLog(@"%d", [chart retainCount]);
self.chart = [[BNPieChart alloc] initWithFrame:self.view.frame];
NSLog(@"%d", [chart retainCount]);
Run Code Online (Sandbox Code Playgroud)
终端显示:
[Session started at 2011-03-28 11:09:46 +0200.]
2011-03-28 11:09:51.008 Finance[35111:207] 0
2011-03-28 11:09:51.010 Finance[35111:207] 2
Run Code Online (Sandbox Code Playgroud)
据我所知,retainCount应该等于1,而不是2.
在尝试从书中学习Objective C时,我希望能够运行一些代码片段,如...
NSString *str = @"Hello, world!";
NSLog(@"Retain count is %d", [str retainCount]);
Run Code Online (Sandbox Code Playgroud)
在Ruby中我只是把它放在一个snippet.rb文件中并ruby snippet.rb从终端运行.JavaScript有jsfiddle.net.使用目标c有同样简单的方法吗?
我正在检查一些对象的保留计数
NSLog(@"r = %d", [aObject retainCount];
Run Code Online (Sandbox Code Playgroud)
似乎我能得到的最低值是"r = 1",即使我故意添加额外的"释放"调用
[aObject release];
Run Code Online (Sandbox Code Playgroud)
即使我尝试将"释放"和"NSLog"测试代码放在对象的dealloc 方法中,"r = 1"限制仍然 有效.
Cocoa运行时似乎忽略了我的额外版本,直到"r = 1",然后在示例程序的最后使用"EXC_BAD_ACCESS"崩溃(没有GC).
我唯一的解释(猜测)是我们需要r> = 1来访问对象.并且Cocoa运行时只是试图避免让任何对象的保留计数过早地变为0.
如果我错了,有人可以确认或纠正我吗?
当我使用NSArray和NSString对象记录保留计数时,我的行为不均匀.
请参阅下面的代码,
NSArray *aryTemp = [NSArray arrayWithObjects:@"One",nil];
NSLog(@"Retain Count :%d",[aryTemp retainCount]);
NSArray *aryTemp2 = [[NSArray alloc] initWithObjects:@"One",nil];
NSLog(@"Retain Count :%d",[aryTemp2 retainCount]);
NSString *strTemp = @"One";
NSLog(@"Retain Count :%d",[strTemp retainCount]);
NSString *strTemp2 = [[NSString alloc] initWithString:@"One"];
NSLog(@"Retain Count :%d",[strTemp2 retainCount]);
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出
2011-03-01 19:19:32.410 Test[14607:207] Retain Count :37
2011-03-01 19:19:32.412 Test[14607:207] Retain Count :1
2011-03-01 19:19:32.413 Test[14607:207] Retain Count :2147483647
2011-03-01 19:19:32.413 Test[14607:207] Retain Count :2147483647
Run Code Online (Sandbox Code Playgroud)
代码有什么问题?
谢谢
Pratik Goswami
为什么此代码显示保留值大于1?为什么它是2147483647?
NSString *data22 = [[NSString alloc] initWithString:@"fsdfsfsdf"];
int a = [data22 retainCount];
NSLog(@"retain count 1== %d ====" ,a);
Run Code Online (Sandbox Code Playgroud)
上面代码的输出是
retain count 1== 2147483647 ====
Run Code Online (Sandbox Code Playgroud) iphone ×8
objective-c ×8
retaincount ×4
ios ×2
cocoa ×1
cocoa-touch ×1
nsstring ×1
retain ×1
xcode ×1
xcode4 ×1