大佬教程收集整理的这篇文章主要介绍了iphone – @“”字符串类型并释放您不拥有问题的对象,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有一个字符串@“你好我是一个字符串”.是@“”一个对象?它是什么 ?它存放在哪里?
如果我发布一个我没有创建的对象会发生什么?或者它的复杂性是什么?
NSString *String1 = [[NSString alloc] initWithString:@"String"]; NSString *String2 = String1; [String2 release];
还有一个问题是什么区别?
NSString *String1 = [[NSString alloc] initWithString:@"String"]; NSString *String2 = @"String";
我知道我是一个菜鸟但我只是想知道.
提前致谢
编辑:
这不会创建新对象. 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,请注明来意。