我发现NSString有一个奇怪的行为.我试着运行下面的代码并注意到了这一点.
NSString *str = [[NSString alloc] initwithstring : @"hello"];
[str release];
NSLog(@" Print the value : %@", str);
Run Code Online (Sandbox Code Playgroud)
在这里,在第三行应用程序应该崩溃,因为我们正在访问一个被释放的对象.但它印刷了str的价值.它没有崩溃.但是对于NSArray,我观察到了不同的行为.
NSArray *array = [[NSArray alloc] initwithobjects : @"1", @"2", nil];
[array release];
NSLog(@"Print : %@", [array objectatindex : 0]);
NSLog(@"Print : %@", [array objectatindex : 0]);
Run Code Online (Sandbox Code Playgroud)
该代码有两个用于NSArray的NSLog语句.在执行第一个NSLog后释放,这是打印值.但是当第二个NSLog被执行时,应用程序崩溃了.应用程序崩溃是可以接受的,因为访问的数组已经发布 但是当第一个NSLog执行时它应该崩溃.不是第二个.
帮助我解决这个问题.在这些情况下如何发布.
谢谢Jithen
只是几天我正在研究一个项目,我必须看看什么是一个字符串的保留计数.
但它总是让我回复"2147483647",为什么会如此呢?
查看此代码以自行检查.
NSString *str = [[NSString alloc] initWithString:@"Hello World"];
NSLog(@"String Retain Count: %i", [str retainCount]);
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么它没有返回1像其他对象返回,为什么我得到"2147483647"
提前致谢.
我试图回答有关==运算符的另一个问题,我创建了这段代码:
NSString *aString = @"Hello";
NSString *bString = aString;
NSString *cString = @"Hello";
if (aString == bString)
NSLog(@"CHECK 1");
if (bString == cString)
NSLog(@"CHECK 2");
if ([aString isEqual:bString])
NSLog(@"CHECK 3");
if ([aString isEqual:cString])
NSLog(@"CHECK 4");
NSLog(@"%i", aString);
NSLog(@"%i", bString);
NSLog(@"%i", cString);
Run Code Online (Sandbox Code Playgroud)
但对结果感到惊讶:
Equal[6599:10b] CHECK 1
Equal[6599:10b] CHECK 2
Equal[6599:10b] CHECK 3
Equal[6599:10b] CHECK 4
Equal[6599:10b] 8240
Equal[6599:10b] 8240
Equal[6599:10b] 8240
Run Code Online (Sandbox Code Playgroud)
这里有一些编译技巧吗?
一个菜鸟问题.
如果我有一个字符串@"你好我是一个字符串".是@""一个对象?它是什么 ?它存放在哪里?
如果我发布一个我没有创建的对象会发生什么?或者它的复杂性是什么?
NSString *string1 = [[NSString alloc] initWithString:@"string"];
NSString *string2 = string1;
[string2 release];
Run Code Online (Sandbox Code Playgroud)
还有一个问题是什么区别?
NSString *string1 = [[NSString alloc] initWithString:@"string"];
NSString *string2 = @"string";
Run Code Online (Sandbox Code Playgroud)
我知道我是一个菜鸟但我只是想知道.
提前致谢
编辑:
我的意思是说init initWithString而不是stringWithString
该方法retainCount应该返回无符号整数.
为什么然后,[@"Hi" retainCount]返回-1?
以下代码应该在“手动引用计数”下崩溃,因为数组内的对象被释放两次。为什么它不会崩溃?
NSMutableArray *array = [NSMutableArray array];
[array addObject:@"1"];
[array addObject:@"2"];
[array addObject:@"3"];
for (int i=array.count-1 ; i>= 0 ; i--)
{
id object = [array objectAtIndex:i];
[object release];
[array removeObject:object];
}
Run Code Online (Sandbox Code Playgroud) 我们如何释放不是alloc或evern其他对象的NSString?
例:
NSString *test = @"testing";
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
objective-c ×7
ios ×3
iphone ×3
cocoa ×1
directive ×1
ipad ×1
nslog ×1
nsstring ×1
retaincount ×1
types ×1