【发布时间】:2017-01-30 01:29:25
【问题描述】:
我正在学习内存管理概念。我创建了一个string1 并将string1 分配给另一个string2,现在我发布了这个string1。
这里 string2 保留计数为 1,但在 NSLog 语句中它提供 EXC Bad 访问。
当我分配字符串时
NSString * string1 = [[NSString alloc]initWithFormat:@"hello"];
string2 = string1;
NSLog(@"string1 memory address = %p, string2 memory address = %p", &string1, &string2);
[string1 release];
NSLog(@"[string2 retainCount] = %lu", (unsigned long)[string2 retainCount]);
NSLog(@"string2 = %@", string2); // here app is crashing
这是否意味着 string2 也有一条自动释放消息,因为如果我使用 string2 = [string1 copy]; 而不是 string2 = string1; 它不会崩溃。
所以我想问一下崩溃是否是因为它有string2的自动释放消息以及它与string2释放命令的关系。
请指教!
【问题讨论】:
-
我觉得这个链接可以帮到你:stackoverflow.com/questions/8702540/nsstring-release
-
1.保留计数毫无意义。 2.使用ARC。
标签: ios objective-c memory-management nsstring manual-retain-release