当我使用/ 创建`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;)不会产生任何开销,但当然只能在所涉及类的实例方法内使用。
慕森卡
TA贡献1806条经验 获得超8个赞
我开始开发Cocoa时发现的差异之一是,如果我将变量设置为使用@ Property / @ Synthesize语法,而我没有使用self.myVariable = obj或[self setMyVariable:obj]而是 myVariable = obj,如果稍后释放obj,则不会保留该对象。(假设已将@Property设置为使用保留。)
原因是在使用myVariable = obj时未设置保留计数,而在释放obj时,计数现在为零。(除非您自己保留它)但是通过使用访问器,它将为您完成保留计数。(再次假设您将其设置为在声明时使用保留)。
- 3 回答
- 0 关注
- 818 浏览
添加回答
举报
0/150
提交
取消