【问题标题】:iOS Objective-C accessing ivars from different classesiOS Objective-C 访问不同类的 ivars
【发布时间】:2011-09-05 08:23:59
【问题描述】:

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

应用程序委托类

假设我想从另一个 UIViewController 类中的 Application Delegate 类访问根控制器(@synthesized as rootController)。我在某处读到,您从 Application Delegate 类访问 ivars 与访问其他 ivars 的方式不同。

普通班

如果我想从另一个 UIViewController 类中访问一些 ivars。我想访问包含 A 类中的名称列表(NSArray)(@synthesized as names)的 ivar,并从类 B 访问它们。 p>

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

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

【问题讨论】:

    标签: objective-c cocoa-touch ios instance-variables


    【解决方案1】:

    应用程序委托是一个单例,因此您可以从任何地方访问这些属性。

    在“普通”类的情况下,假设您不想使其成为单例,您通常会使用委托模式。这意味着 A 类成为 B 类的委托,B 类可以调用 A 类将实现的方法,这就是 UITableViews 与 DataSource 委托的工作方式。

    这仅在您只需要从另一个类访问这些属性时才有效(委托不支持没有一点黑客的多委托),否则我会将您的数据封装在任何类都可以访问的模型中。

    【讨论】:

      【解决方案2】:

      如果我对您的问题的理解正确,您将希望牢牢掌握模型-视图-控制器模式(顺便说一下,这种模式在 iOS 中无处不在)。

      基本上,您应该区分视图和控制器——这在 iOS 中是非常“自然”的,因为它是由框架强制执行的——而且还要区分控制器/视图和模型,这是你保存数据的地方,在您的情况下是名称列表。控制器访问模型并对其进行修改,并调解从视图对模型的访问。

      模型应该以某种方式被分解——比如说,在它自己的一个类中——以允许模块化和低依赖性。在一个特定的设计中(并不意味着它是最好的或更适合您),模型可以是单例,以便您可以轻松地从其他对象访问它。

      你会明白,一个有效的模型必须经过适当的设计,但这是要走的路。

      检查this tutorial 和这个S.O. topic

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-30
          • 1970-01-01
          • 2011-09-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-07
          相关资源
          最近更新 更多