self.flipsidenavigationbar=aNavigationBar;
Run Code Online (Sandbox Code Playgroud)
为什么这里需要自我?(否则它会崩溃)
[flipsidenavigationbar pushnavigationietm........];
Run Code Online (Sandbox Code Playgroud)
为什么不需要自我?
请注意,flipsidenavigationbar是一个声明为属性并合成的iVar.
谢谢
亚历克斯
您需要记住的是,点不仅是访问iVar的语法,而且是调用设置(或获取)ivar的方法的简写.
这意味着self.foo与foo不同(假设foo是声明为属性的ivar).self.foo =值; 相当于[self setFoo:value]; 或者value = self.foo相当于value = [self foo]; 当你刚写foo时,你就是在没有任何方法调用的情况下直接访问foo.
区别很重要,因为setter和getter方法通常不只是分配或获取值,而是保留值.
所以,在你写的情况下:
self.flipsidenavigationbar=aNavigationBar;
Run Code Online (Sandbox Code Playgroud)
你实际上正在为这个ivar调用setter方法,所以这一行相当于:
[self setFlipSideNavigationBar:aNavigationBar];
Run Code Online (Sandbox Code Playgroud)
假设该属性被定义为复制或保留,则调用setter将保留aNavigationBar.另一方面,如果你写:
self.flipsidenavigationbar = aNavigationBar;
然后你只是直接设置self.flipsidenavigationbar的值,并且不保留aNavigationBar,这可能会导致应用程序在以后访问aNavigationBar时崩溃
关于另一个问题:
[flipsidenavigationbar foo];
Run Code Online (Sandbox Code Playgroud)
只是一个方法调用,您不必使用点(虽然有时可能需要),因为您可以直接在实例方法中引用ivars.
(顺便说一句:为什么不用骆驼的情况?这真的伤害了眼睛)
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |