咨询个objective-c的语法问题

kofwr 2010-07-09 03:34:35
在head first iphone development中看到关于属性的readwirte和retain有如下解释,
readwrite:When you want the property to be modifiable by people. The compiler will
generate a getter and a setter for you. This is the default

retain:When you’re dealing with object values. The compiler will retain the value
you pass in and release the
old value when a new one comes in.

请问readwrite自动生成的代码中,setter方法的实现是retain新的对象并release旧的对象吗?我觉得默认的readwrite属性应该符合内存管理的要求。
...全文
245 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zeng5261435 2010-11-29
  • 打赏
  • 举报
回复
re ad wr i te
表明了属性是可读写的。这是默认的参数
表示属性具有获取器和设置器一对访问器方法
re ado n l y
表明了属性是只读的,且只有获取器方法
如果试图对属性使用点语法赋值,将引发编译
错误
zeng5261435 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jiangyuaiqing 的回复:]

定义set方法的时候,先release旧的,再给它赋新的。
[/Quote]
所以我认为内存管理应该是符合要求的
ameyume 2010-09-01
  • 打赏
  • 举报
回复
UP,学习了~~~
gemini2100 2010-09-01
  • 打赏
  • 举报
回复
readwrite:When you want the property to be modifiable by people. The compiler will
generate a getter and a setter for you. This is the default
这个不要管,除非你只指定read

retain:When you’re dealing with object values. The compiler will retain the value
you pass in and release the
old value when a new one comes in
这个关键字也是不要管的,作用就是保证你在用这个对象是不会释放,内存管理不需要你动手
liaohanwei 2010-08-29
  • 打赏
  • 举报
回复
一个很重要的理由让你使用retain,你用set的话你的属性值不知道什么时候就给删了。
yuchong1984 2010-08-05
  • 打赏
  • 举报
回复
不建议使用readwrite,这样不利于内存管理,虽然使用Retain需要手动释放内存,但是这样可以合理的管理内存,是用完后立即释放。
crystalbug 2010-07-28
  • 打赏
  • 举报
回复
对的,@synthesize生成的访问器是符合内存管理的,不需要你去关心引用计数问题。
当你在你的析构函数里或者其他位置: self.yourObject = nil; 时yourObject的内存就会自动被释放
Snake_Jay 2010-07-27
  • 打赏
  • 举报
回复
定义set方法的时候,先release旧的,再给它赋新的。
shengyx 2010-07-20
  • 打赏
  • 举报
回复
官方:

// retain
-(void)setMyObject:(id)newValue{
if (_myObject != newValue) {
[_myObject release];
_myObject = [newValue retain];
}
}
chenzhp 2010-07-17
  • 打赏
  • 举报
回复
来学习了。帮顶
ArthurChen 2010-07-16
  • 打赏
  • 举报
回复
不用理解得太复杂了。
retain可以简单的理解引用计数加一,你现在要用就retain,用完得release

setter只是简单的赋值,没那么复杂的。不可能读写一次属性就会分配再释放一段内存。创建这个属性的时候这段内存已经分配好了,来新的就retain,旧的就释放了(系统做的)。
xjnhzwy 2010-07-15
  • 打赏
  • 举报
回复
setter方法的实现是retain新的对象release是创建的新对象!
kofwr 2010-07-12
  • 打赏
  • 举报
回复
顶顶顶
vclongking 2010-07-10
  • 打赏
  • 举报
回复
关注 , 学习一下Object-C ,
帮顶起来。

29,049

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧