【问题标题】:Best way to have an application-wide array?拥有应用程序范围阵列的最佳方式?
【发布时间】:2012-07-21 17:58:47
【问题描述】:

我有一个类,其中包含从我的服务器下载数据的方法。这是 JSON 的形式,但会被解析并放入一个数组中。由于这是一个“模型”文件,那么制作它以便多个“控制器”可以访问此数据的最佳方法是什么?

【问题讨论】:

  • 全局变量?辛格尔顿? [[UIApplication sharedApplication] 委托] 的属性?
  • 谢谢,我猜它们各有优缺点,那么推荐哪种方法?
  • 我建议您将其作为您的应用委托的属性。

标签: objective-c ios xcode arrays static


【解决方案1】:

将其挂在应用程序委托上,将其粘贴在全局变量中,或在返回它的适当位置声明一个类方法。

更好的是,现在开始考虑拥有一个合适的模型层,除其他外,它可以管理这些数据。随着应用程序的发展,这将使重构在未来变得更加容易。

【讨论】:

  • 模型层是指Core Data吗?
  • 不一定; Core Data 无疑是我强烈推荐的优秀数据持久性工具。如果您没有保留那么多数据或所有数据都是客户端/服务器,那么 - 不 - 最初不需要。 “模型层”是一个通用术语。
  • 我将从相当复杂的后端数据库中持久化大量数据,因此我认为核心数据是要走的路。谢谢推荐。
【解决方案2】:

您可以使用数组对象创建类的单例对象。通过使用类方法,您可以在应用程序的任何位置获取该数组。

例如

在 Cardnames.h 文件中

#import <Foundation/Foundation.h>

@interface CardNames : NSObject

@property (nonatomic, retain) NSMutableArray *CardNamesArray;

+(CardNames*) getCardsList;

@end

在 Cardnames.m 文件中

#import "CardNames.h"

@implementation CardNames

@synthesize CardNamesArray;

static CardNames *cards = nil;

+(CardNames*) getCardsList
{
    @synchronized(self)
    {
        if(cards == nil)
        {
            cards = [[self alloc] init];

            cards.CardNamesArray = [[NSMutableArray alloc] init];

            /// code to fill array

        }
        return cards;
    }
}
@end

在其他类中你可以像这样使用

#import "CardNames.h"
.
.
.
NSMutableArray *CardsArray = [[CardNames getCardsList] CardNamesArray];

【讨论】:

    猜你喜欢
    • 2022-08-04
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2016-07-12
    • 2013-02-15
    • 2015-01-18
    相关资源
    最近更新 更多