为了账号安全,请及时绑定邮箱和手机立即绑定

自变量和变量差

自变量和变量差

繁华开满天机 2019-11-20 12:33:01
当我使用/ 创建`myVariable 时,self.myVariable = obj;和之间有什么区别?myVariable = obj;@propery@synthesize
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

重要的是要注意,编译器将点语法转换为简单的objc_msgSend调用:也就是说,其底下的行为就像是发送给该变量的访问器的消息一样。因此,以下三个条件都是相同的:


self.myVariable = obj;


[self setMyVariable:obj];


objc_msgSend(self, @selector(setMyVariable:), obj);

当然,这意味着使用点语法实际上会导致完整的消息发送,这意味着调用新函数以及与之相关的所有开销。相反,使用简单赋值(myVariable = obj;)不会产生任何开销,但当然只能在所涉及类的实例方法内使用。


查看完整回答
反对 回复 2019-11-20
?
慕森卡

TA贡献1806条经验 获得超8个赞

我开始开发Cocoa时发现的差异之一是,如果我将变量设置为使用@ Property / @ Synthesize语法,而我没有使用self.myVariable = obj[self setMyVariable:obj]而是 myVariable = obj,如果稍后释放obj,则不会保留该对象。(假设已将@Property设置为使用保留。)

原因是在使用myVariable = obj时未设置保留计数,而在释放obj时,计数现在为零。(除非您自己保留它)但是通过使用访问器,它将为您完成保留计数。(再次假设您将其设置为在声明时使用保留)。


查看完整回答
反对 回复 2019-11-20
  • 3 回答
  • 0 关注
  • 766 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信