2011-05-31 122 views
1

从不同类访问ivars的首选方法是什么?iOS Objective-C从不同类访问ivars

应用程序委托类

说我希望访问来自应用程序委托类根控制器(@synthesized如rootController)在另一个UIViewController类。我读过某处,您从Application Delegate类访问ivars的方式与访问其他ivars的方式不同。

随班就读

如果我要访问一些高德从让说,另一个UIViewController类。我想访问包含类A的名称(@synthesized作为名称)的列表(NSArray)的ivar,并从类B获得对它们的访问权限。

ivars具有默认访问权限(受保护)。

也许你可以点我一个很好的教程来解释如何访问ivars。

回答

1

应用程序委托是一个单身,所以你可以从任何地方访问这些属性。

在'正常'类的情况下,假设你不想使它成为一个单例,你通常会使用委托模式。这意味着类A成为类B的委托,而类B可以调用类A将实现的方法,这就是UITableViews如何与数据源委托一起工作。

这只适用于你只需要从另一个类访问这些属性的情况(委托人不支持多委托没有一点唠叨),否则我会将数据封装在任何类可以访问的模型中。

0

我认为你需要在这里的概念是声明的属性:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17

您似乎已经在使用它(与@synthesize)。

ivars需要从类的外部访问getter和setter。通过使用属性,这些getters/setter可以通过@synthesized自动实现。

对于应用程序委托,我不明白:你想通过应用程序委托从UIViewController访问另一个控制器吗?

1

如果我正确理解你的问题,你将需要牢牢掌握Model-View-Controller模式(顺便说一下,这在iOS中是无处不在的)。

基本上,你应该区分你的视图和你的控制器 - 这在iOS中非常“自然”,因为它是由框架强制执行的 - 而且在控制器/视图和你的模型之间也是如此,数据,在你的情况下,名单的名单。控制器访问模型并对其进行修改,并调解对视图的访问。

该模型应该在某种程度上被分解出来 - 比如,在它自己的类中 - 为了允许模块化和低依赖性。在一个特定的设计中(并不意味着它对你来说是最好的或者更合适的),Model可以是一个Singleton,所以你可以很容易地从其他对象访问它。

你会明白,一个有效的模型必须正确设计,但这是要走的路。

检查this tutorial以及此S.O. topic