主从模板中的属性和 ivar

Posted

技术标签:

【中文标题】主从模板中的属性和 ivar【英文标题】:Properties and ivars in MasterDetail template 【发布时间】:2013-03-17 18:27:31 【问题描述】:

在阅读了 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

为什么会这样?我只是不明白为什么这两件事的声明方式不同。 谢谢。

【问题讨论】:

【参考方案1】:

将某物声明为“property”允许其他对象访问和使用它。在上述情况下,将“detailViewController”作为属性添加到 MasterViewController 意味着其他对象可以访问和使用 DetailViewController 公开的方法和属性。

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

【讨论】:

这是对的,但你也可以通过在实现文件中声明私有属性来声明它们,这通常比 ivars 更受欢迎。【参考方案2】:

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

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

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

【讨论】:

以上是关于主从模板中的属性和 ivar的主要内容,如果未能解决你的问题,请参考以下文章

IOS模拟器主从应用模板

Swift 主从模板应用之谜

属性和 ivars 的问题

Apple CoreData 模板中的属性声明

我可以将标准 ivars 和属性添加到 NSManagedObject 吗?

无法访问 freemarker 模板中的会话属性