【问题标题】:Objective C iOS positioning of code?Objective C iOS 定位代码?
【发布时间】:2011-07-16 08:10:19
【问题描述】:

我是 Objective-C 的新手,目前正在学习如何使用 Xcode 和创建 iOS 应用程序。我目前正在测试一个基于导航的应用程序。作为我展示的一部分,我需要下载 Web 数据、剥离 html 标签、格式化字符串等,这需要大量代码。我发现当将此代码插入到实现文件中时,它在 iPhone 模拟器中的速度非常慢。
这似乎是一个非常明显的问题,但我将代码放在 View 实现文件中是否正确?还是应该创建一个单独的文件来处理所有数据,然后将结果传递给视图文件? 再次抱歉,如果这是微不足道的,我们将不胜感激。

【问题讨论】:

    标签: objective-c xcode ios4


    【解决方案1】:

    您不应该在视图类中进行任何数据获取。视图类仅管理显示数据。从 Apple 的 Core Competencies 文档开始,然后点击指向 The Model View Controller Design Pattern 的链接。

    总而言之,您需要一个模型类的集合来保存您的数据,而与数据的显示方式无关。您希望 View 类显示您的数据,而与收集和计算数据的方式无关。并且您需要将两者粘合在一起的 Controller 类。

    【讨论】:

    • 非常感谢 Rob,这些东西真的很有帮助。
    【解决方案2】:

    您好,欢迎来到 Stack Overflow!从技术上讲,您现在所做的一切都很好。但是,有效编码的一种常见策略称为模型-视图-控制器,您可以在其中分离执行不同操作的组件。对于您的示例,下载和处理应在模型部分进行,这是内容的来源。控制器只负责获取模型的数据并将其传递给视图。该视图已作为UINavigationViewController 的一部分提供。同样,这不会影响性能,它只是一种使以后的维护更容易的样式。

    编辑

    针对您的第二个问题,您可以执行以下操作(假设您有 MyModelMyController)。

    MyModel.h:

    @interface MyModel : NSObject {
        NSMutableArray *_data;
    }
    @property (nonatomic, retain) NSMutableArray *data;
    @end
    

    MyModel.m:

    @implementation MyModel
    
    @synthesize data = _data;
    
    - (id)init {
        if ((self = [super init])) {
            self.data = [[[NSArray alloc] init] autorelease];
            // do your processing here and add it to self.data
        }
        return self;
    }
    

    然后,在MyController.m 中,初始化MyModel 的一个实例,并在需要该数组时访问model.data

    【讨论】:

    • 啊,非常感谢,所以如果我想创建一个模型部分,我只需转到文件 > 新文件 > 目标 C 类 > NSObject?谢谢!
    • 是的,模型类都继承自NSObject。然后在控制器中创建模型的新实例并让它处理所有处理。
    • 抱歉再问一个问题,但是当我创建其中一个 NSobject 文件时,它会创建实现和接口文件,这一切都很好。因此,如果我将代码放在那里,我将如何将它们发送到视图控制器文件?例如,我必须下载一些数据,经过多次调整,部分数据最终成为我的第二个表格视图控制器单元格中的文本。抱歉,如果这再次显得微不足道,感谢所有帮助。
    【解决方案3】:

    难题,我认为您最好在某个控制器对象中编写代码,而不是在您的视图对象中。视图只关心显示信息,而控制器将检索数据并将其传递给视图。 正如您的测试所建议的那样,尝试以一种不会阻止您的应用程序的方式检索数据。 在这种情况下,您应该考虑阅读 Apple 文档中的 Threading Programming Guide,其中涵盖了该主题。

    【讨论】:

    • 希望接受您和 Rob 作为我接受的答案,因为两者都同样好,非常感谢您的帮助,现在将查看文档。
    • 考虑投票支持我们俩 ;-)
    • 当我有足够的代表时会这样做!
    • 嗨 Vince,我研究了线程,我认为它可以解决我的问题。只是几个问题:如果我有两个表格视图控制器,并且上述代码包括下载 html 网站页面和剥离 html 标签等以获取数据。如果我在第二个视图控制器中需要所述数据,我认为在第一个视图控制器中加载 html 数据会更快(因此程序在启动后立即下载数据,而不是在用户进入第二个视图控制器时)视图控制器?)。你对我将如何处理这件事有什么建议吗?非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2019-08-21
    • 2015-09-20
    相关资源
    最近更新 更多