self.赋值时使用alloc的问题
来源:互联网 发布:html 阿里云 视频 编辑:程序博客网 时间:2024/06/11 07:33
作为新手,对self.的用法有些不习惯,因为它和其它语言不同。赋于了很多特殊的情况。
属性赋值时要注意内存问题。
对于 self.myArray = [NSArray alloc]init....
myArray的定义为:
@property (nonatomic,retain)NSArray * myArray;@synthesize myArray;
对不起,这个代码多半会有内存泄露。试试 myArray的retainCount ,现在是2.
如果改成这样:
myArray = [NSArray alloc]init...
这样就不会。myArray的retainCount是1。
why?
这就和 self.的原理有关。因为self.的赋值调用实际代码会是:
-(void) setMyArray: (NSArray *) newArray{ if(myArray != newArray) { [myArray release] myArray = [newArray retain]; } }看到没有,[newArray retian],所以,第一种写法会导致retainCount为2。
因此,对于属性的赋值,正确的写法有以下几种。
1: myArray = [NSArray alloc]init...2: self.myArray = [[NSArray alloc]init..]autorelease];3: NSArray * temp = [NSArray alloc]init.. self.myArray = temp; [temp release];
当然,在dealloc里,你需要将 [myArray release];
问题虽小,但对于新手,确实容易犯迷糊。
- self.赋值时使用alloc的问题
- [self alloc]和[[self class] alloc]的区别
- alloc使用时的注意事项
- 关于 [[self class] alloc]的理解
- self.nameVarPtr = [[ObjectName alloc] init] 和nameVarPtr = [[ObjectName alloc] init] 的区别
- new与alloc init,[NSArray array] 和 [[NSArray alloc]init] 及 self. 和 _ 的区别
- self.view.frame.size.height赋值问题
- 了解alloc、init的问题1
- CCColorLayer [[[self alloc] initWithColor:color]报错
- angular使用select赋值的问题
- 关于self的使用
- self 的使用
- self 关键字的使用
- 8.block中使用self的循环引用问题
- iOS开发中 new与alloc/init的区别 及 [NSArray array] 和 [[NSArray alloc]init] 及 self. 和 _ 的区别
- iOS开发中 new与alloc/init的区别 及 [NSArray array] 和 [[NSArray alloc]init] 及 self. 和 _ 的区别
- alloc init问题
- OC中alloc内存分配大小的问题
- ESF相关
- 从程序员到项目经理(四):外行可以领导内行吗
- Java中取小数点后两位
- 面试中的开放性问题
- Wireshark "The NPF driver isn’t running"错误
- self.赋值时使用alloc的问题
- Structure and Union有什么区别?(转)
- iOS6 横屏项目自动旋转的问题解决 cocos2d
- smartupload图片上传
- 解读java内存优化编程的三种方法
- 几个关于字符串的C库函数,strstr,strchr
- _IO, _IOR, _IOW, _IOWR 宏的用法与解析
- Spring事务配置的五种方式
- Windows service 界面问题