大佬教程收集整理的这篇文章主要介绍了Objective-C自动释放池不释放对象,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有setter和getter的类,它基本上设置了一个NSString *名称.释放池后,我尝试NSLog对象,它仍然有效,但我想它不应该?
@interface TESTClass : NSObject { NSString *name; } - (void) setName: (NSString *) String; - (NSString *) name; @end @implementation TESTClass - (void) setName: (NSString *) String { name = String; } - (NSString *) name { return name; } @end int main (int argc,@R_197_3377@ * argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; TESTClass *var = [[TESTClass alloc] init]; [var setName:@"Chris"]; [var autorelease]; [pool release]; // This should not be possible? NSLog(@"%@",[var name]); return 0; }
- (void) setName: (NSString*) aName { if( name != aName ) { if( name ) [name release]; name = [aName retain]; // or copy } }
或者从一开始就使用属性.
此外,如果在实例变量中保留对象引用,则应提供dealloc方法的正确定义:
- (void) dealloc { self.name = nil; [super dealloc]; }
最后,仅仅因为一个对象已被解除分配,并不意味着前一个实例的内存无效.你的原始程序最有可能在一个悬空参考(var)上调用一个方法,这恰好@L_675_16@纯粹运气. (特别是,(自动)释放不会自动将引用设置为nil).
以上是大佬教程为你收集整理的Objective-C自动释放池不释放对象全部内容,希望文章能够帮你解决Objective-C自动释放池不释放对象所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。