自变量和变量差

当我使用/ 创建`myVariable 时,self.myVariable = obj;和之间有什么区别?myVariable = obj;@propery@synthesize



繁华开满天机
浏览 753回答 3
3回答

LEATH

重要的是要注意,编译器将点语法转换为简单的objc_msgSend调用:也就是说,其底下的行为就像是发送给该变量的访问器的消息一样。因此,以下三个条件都是相同的:self.myVariable = obj;[self setMyVariable:obj];objc_msgSend(self, @selector(setMyVariable:), obj);当然,这意味着使用点语法实际上会导致完整的消息发送,这意味着调用新函数以及与之相关的所有开销。相反,使用简单赋值(myVariable = obj;)不会产生任何开销,但当然只能在所涉及类的实例方法内使用。

慕森卡

我开始开发Cocoa时发现的差异之一是,如果我将变量设置为使用@ Property / @ Synthesize语法,而我没有使用self.myVariable = obj或[self setMyVariable:obj]而是 myVariable = obj,如果稍后释放obj,则不会保留该对象。(假设已将@Property设置为使用保留。)原因是在使用myVariable = obj时未设置保留计数,而在释放obj时,计数现在为零。(除非您自己保留它)但是通过使用访问器,它将为您完成保留计数。(再次假设您将其设置为在声明时使用保留)。
打开App,查看更多内容
随时随地看视频慕课网APP