相关疑难解决方法(0)

IOS:NSString的发布没有按预期工作

我发现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

iphone memory-management ios

9
推荐指数
2
解决办法
569
查看次数

NSString保留Count

只是几天我正在研究一个项目,我必须看看什么是一个字符串的保留计数.

但它总是让我回复"2147483647",为什么会如此呢?

查看此代码以自行检查.

NSString *str = [[NSString alloc] initWithString:@"Hello World"];
NSLog(@"String Retain Count: %i", [str retainCount]); 
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么它没有返回1像其他对象返回,为什么我得到"2147483647"

提前致谢.

objective-c

6
推荐指数
1
解决办法
6150
查看次数

字符串形成是由编译器优化的吗?

我试图回答有关==运算符的另一个问题,我创建了这段代码:

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)

这里有一些编译技巧吗?

compiler-construction cocoa objective-c

4
推荐指数
1
解决办法
506
查看次数

@""字符串类型并释放您不拥有问题的对象

一个菜鸟问题.

如果我有一个字符串@"你好我是一个字符串".是@""一个对象?它是什么 ?它存放在哪里?

如果我发布一个我没有创建的对象会发生什么?或者它的复杂性是什么?

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

iphone objective-c ipad ios

3
推荐指数
1
解决办法
167
查看次数

为什么将retainCount发送到@"Hi"返回-1?

该方法retainCount应该返回无符号整数.

为什么然后,[@"Hi" retainCount]返回-1?

types objective-c retaincount

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


目标 C - 由于双重释放而崩溃?

以下代码应该在“手动引用计数”下崩溃,因为数组内的对象被释放两次。为什么它不会崩溃?

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)

memory-management objective-c

2
推荐指数
1
解决办法
523
查看次数

如何发布NSString?

我们如何释放不是alloc或evern其他对象的NSString?

例:

NSString *test = @"testing";
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

iphone objective-c ios

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