iPhone - 这两行代码之间的区别

use*_*878 1 iphone objective-c iphone-sdk-3.0

这两行代码之间的差异是什么:

[cmController currentPageNo];
self.cmController.currentPageNo;
Run Code Online (Sandbox Code Playgroud)

Nic*_*rge 5

实际上存在功能差异 - 第二行相当于:

[[self cmController] currentPageNo];
Run Code Online (Sandbox Code Playgroud)

使用-cmController属性getter方法访问cmControllerivar可能会使行为与直接访问ivar不同.这些可能包括延迟初始化或原子线程锁定,或一系列其他行为.除非你有充分的理由,否则你应该(通常)使用属性的访问器方法,而不是直接访问ivars.

所以澄清一下:

[cmController currentPageNo]; // 1
cmController.currentPageNo;   // 2

[[self cmController] currentPageNo]; // 3
self.cmController.currentPageNo;     // 4
Run Code Online (Sandbox Code Playgroud)

1和2在功能上彼此相同,但使用不同的语法.3和4在功能上也彼此相同,但使用不同的语法.如果您厌恶使用dot-syntax,则应使用版本4或版本3.