HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – @“”字符串类型并释放您不拥有问题的对象大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
一个菜鸟问题.

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

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

NSString *String1 = [[NSString alloc] initWithString:@"String"];
NSString *String2 = String1;
[String2 release];

还有一个问题是什么区别?

NSString *String1 = [[NSString alloc] initWithString:@"String"];
NSString *String2 = @"String";

我知道我是一个菜鸟但我只是想知道.

提前致谢

编辑:

我的意思是说init initWithString而不是StringWithString

解决方法

NSString * String2 = String1;

这不会创建新对象. String1不是对象,它是指向对象的指针.该赋值只是复制指针并将其放在String2中.

由于实现细节(内部实现细节在所有情况下都可能不是真的并且永远不应该依赖),这是真的:

NSString *String1 = [NSString StringWithString:@"String"];
String1 == @"String"; // this is a true expression

字符串常量 – @“dddd” – 由编译器编译成二进制文件.它们无法释放,每个唯一字符串只有一个常量. StringWithString:识别常量并且不创建新副本.

现在,如果你这样做:

NSMutableString *String1 = [NSMutableString StringWithString:@"String"];
NSMutableString *String2 = String1;
[String2 release];

这会将@“String”复制到NSMutableString的新实例中,而String1将指向该对象.

但是,该代码将是一个过度释放([String1 release];也是),因为StringWithString:返回一个自动释放的对象.

现在,如果你是:

NSMutableString *String1 = [[NSMutableString alloc] initWithString:@"String"];
NSMutableString *String2 = String1;
[String2 release];

那么该代码在保留计数方面在技术上是正确的;字符串对象将被释放.但是在发布之后,String1和String2都是悬空指针 – 也就是说,它们所持有的地址不再指向可行的对象,并且尝试发送消息会产生未定义的结果.

大佬总结

以上是大佬教程为你收集整理的iphone – @“”字符串类型并释放您不拥有问题的对象全部内容,希望文章能够帮你解决iphone – @“”字符串类型并释放您不拥有问题的对象所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。