ios – NSObject发布,NSString,NSArray不是吗?

ios – NSObject发布,NSString,NSArray不是吗?,第1张

概述如果我写 – NSObject *a = [[NSObject alloc] init]; // or UIView or something[a release];NSLog(@"a = %@", a); // causes EXC_BAD_ACCESS, fine 但是,如果我写 – NSArray *a = [[NSArray alloc] init]; // or NSString o 如果我写 –

NSObject *a = [[NSObject alloc] init]; // or UIVIEw or something[a release];NSLog(@"a = %@",a); // causes EXC_BAD_ACCESS,fine

但是,如果我写 –

NSArray *a = [[NSArray alloc] init]; // or Nsstring or NSDictionary[a release];NSLog(@"a = %@",a); // no crash,prints empty array or string

为什么第二种情况不会导致访问不良,因为它已经发布了?

解决方法 访问已发布的对象不必立即使应用程序崩溃.

请注意,即使您释放对象,内存也会保留一段时间,内容相同.只有当对象内存已被其他对象覆盖时,才会出现崩溃.请注意,即使使用覆盖的内存,您也不必崩溃.您只能获得一些非常奇怪的行为(例如,当对象是Nsstring时,它可以获得不同的内容).

基本上,这种行为是完全随机的.使用已发布的对象可以立即使您的应用程序崩溃,也可以在5分钟或2小时内崩溃.

编辑:感谢Martin R的一个有趣的评论.似乎由[[NSArray alloc] init]创建的数组,即空的不可变数组,总是返回相同的实例.这意味着您的发布不会使其解除分配.但是,这种行为很容易改变,编译器或OS版本之间可能会有所不同.

总结

以上是内存溢出为你收集整理的ios – NSObject发布,NSString,NSArray不是吗?全部内容,希望文章能够帮你解决ios – NSObject发布,NSString,NSArray不是吗?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1075713.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存