MasterDetail模板中的属性和ivars

时间:2013-03-17 18:27:31

标签: ios objective-c xcode cocoa-touch cocoa

在阅读Objective C中的属性和ivars之后,我仍然对XCode中iOS的MasterDetail模板感到困惑。

MasterViewController声明DetailViewController的属性:

@class DetailViewController;

@interface MasterViewController : UITableViewController

@property (strong, nonatomic) DetailViewController *detailViewController;

@end

对象阵列的ivar:

@interface MasterViewController () {
    NSMutableArray *_objects;
}
@end

为什么会那样?我无法理解为什么这两件事被宣布不同。 感谢。

2 个答案:

答案 0 :(得分:2)

将某些内容声明为“property”允许其他对象访问并使用它。在上面的例子中,将“detailViewController”作为属性添加到MasterViewController意味着其他对象可以访问和使用方法&属性DetailViewController公开。

虽然“_objects”变量是MasterViewController的内部(或私有)。

答案 1 :(得分:2)

Apple的文档通常非常出色。 Apple的模板......有时候有点挑战。随着语言的改进(或者它们不规律地更新),它们有时也很慢。 objects数组应该是私有属性而不是实现声明的ivar。无论如何,请不要过多地阅读。

请记住,视图控制器甚至不应该保存数据;它应该从模型类(模板不提供)中获取它。其中一些是为了使模板更易于使用(它们实际上不是示例代码;它们是模板)。一些奇怪的代码是由于模板引擎的限制。 (他们以前不会为你的类名添加前缀,即使他们告诉你必须在你的类名前加上前缀;这非常烦人。)

不幸的是,在示例代码中看到某些内容并不一定意味着它是一种正确的代码编写方式。 Apple的大部分示例代码在生产代码中都是完全不合适的(大多数示例缺少正确的模型类,或者无法正确处理错误)。但同样,这就是示例代码的本质。专注于coding guidelines。它们比从模板和示例中学习更有用。