iphone - Objective-C 命名约定——澄清

标签 iphone objective-c ios naming-conventions

我有疑问。这对我来说并不明显。

假设我们在一个类中有一个名为myProperty@property。我们在合成的时候可以做两件事。我们可以为它分配一个 ivar,比如 _someIVar,或者我们可以简单地省略它,在这种情况下,编译器会负责创建一个 ivar 与该属性具有相同的名称 myProperty。在第一种情况下,我们可以使用 ivar _someIVar 访问该属性。在第二种情况下,我们可以使用编译器为我们创建的 ivar myProperty

现在我的疑问是,当我们从已经在导航堆栈中的 View Controller 中推送另一个 View Controller 时,我们使用,

[self.navigationController pushViewController:newViewController animated:YES];

因为 navigationController 是一个属性,我假设它应该有一个 ivar 分配给它。只有两种可能。

1) 第一个是 Apple 的惯例是在命名 ivar 之前加上 下划线 (_)。如果是这种情况,我可以像这样调用 pushViewController:animated: 方法,

[_navigationController pushViewController:newViewController animated:YES];

2) 显然,第二种可能性是没有下划线的ivar,

[navigationController pushViewController:newViewController animated:YES];

但是编译器不允许我以任何一种方式访问​​ navigationController。为什么?这与私有(private)属性或其他东西有关,还是我根本不了解 Objective-C?

最佳答案

你不知道 Apple 做了什么来实现 navigationController 属性,所以你不能假设有一个 _navigationController ivar float 在 UIViewController 类的某个地方。恰当的例子:属性可以声明为@dynamic,在这种情况下,实现可以是任何东西。

无法仅通过查看属性本身来猜测支持属性的 ivar。

关于iphone - Objective-C 命名约定——澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9817203/

相关文章:

iPhone GPS - 未收到有效的位置更新

iphone - 如何向 iOS 应用程序添加蓝牙键盘支持?

iphone - NSTimer scheduleTimerWithTimeInterval 和 CoreAnimation

iphone - 方法内创建的变量的内存泄漏

iphone - 更改 IBOutletCollection 的帧值

ios - 如何出于统计目的向 Swift 中的外部服务器发送请求

iOS - 无法从其数据源获取单元格

iphone - Objective-C程序收到信号: "EXC_BAD_ACCESS" push notifications

ios - 使用 AirPrint 打印 Pdf 会导致内容被截断

iphone - 如何在模拟器中测试不同的 iOS