问题描述
|
从不同类别访问ivars的首选方法是什么?
申请代表类别
假设我要从另一个UIViewController类中的Application Delegate类访问根控制器(@synthesized为rootController)。我在某处读到您从Application Delegate类访问ivars的方式与访问其他ivars的方式不同。
普通班
如果我想从另一个访问一些ivars,可以说另一个UIViewController类。我想访问在类A中包含名称(@synthesize为名称)列表(NSArray)的ivar,并从类B中访问它们。
ivars具有默认访问权限(受保护)。
也许您可以为我指向一个很好的教程,解释如何访问ivars。
解决方法
应用程序委托是单例,因此您可以从任何地方访问这些属性。
对于“普通”类,并假设您不想使其成为单例,通常将使用委托模式。这意味着类A成为类B的委托,并且类B可以调用类A将实现的方法,这就是UITableViews与数据源委托一起工作的方式。
这仅在您仅需要从另一个类访问这些属性时有效(代理不带一点黑客就不支持多个代理),否则,我会将您的数据封装在任何类都可以访问的模型中。
, 如果我正确理解了您的问题,那么您将希望牢牢掌握Model-View-Controller模式(顺便说一下,在iOS中无处不在)。
基本上,您应该区分视图和控制器-在iOS中这是非常“自然的”,因为它是由框架强制执行的-在控制器/视图和模型(您拥有数据的位置)之间,在您的情况下,名称列表。控制器访问模型并对其进行修改,还可以通过视图协调对模型的访问。
应该以某种方式将模型剔除-例如,在其自己的类中-以允许模块化和低依赖性。在一种特定的设计中(并不意味着它最适合您或更适合您),模型可以是Singleton,以便您可以轻松地从其他对象访问它。
您将了解,必须正确设计有效的模型,但这是可行的方法。
查看本教程以及本S.O.话题。
, 我认为您在这里需要的概念已声明为属性:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163- CH17
您似乎已经在使用它(通过@synthesize)。
ivars需要从类的外部访问getter和setter。通过使用属性,可以使用@synthesized自动实现这些getter / setter。
对于应用程序委托,我不理解:是否要通过应用程序委托从UIViewController访问另一个控制器?