变量赋值和字符串数组Obj-c(iOS)适合初学者

时间:2016-02-21 13:05:36

标签: ios objective-c string variables

我创建了一个视图应用,添加了一个标签,一个不可编辑的文本视图和一个按钮,我有一个字符串数组。真的只是想单击按钮并随意更改字符串。

- (IBAction)viewNextPressed:(id)sender {
    NSArray *affirmationStrings = @[
                                   @"String 1 Pressed",
                                   @"String 2 Pressed",
                                   @"String 3 Pressed"
                                   ];

    //Generate a random index from our array
    int randomNIndex = arc4random() % [affirmationStrings count];

    //Display a string from our array
    self.displayAffirmationText.text = affirmationStrings[randomNIndex];

}

@end

显然这适用于这个例子,但是每次点击按钮时它产生数组的效率非常低。存储阵列的最佳位置在哪里,以便在加载时生成,我可以在需要时访问它?

我看到viewDidLoad但作为初学者,我想尝试理解简单任务的最佳实践。其次是我为大量样本500-1k +字符串存储字符串的方式?

1 个答案:

答案 0 :(得分:2)

对于相对较少数量的字符串,更好的选择是:

  • 向您的班级添加属性或实例变量
  • 在您的init方法中初始化所述属性或实例变量,如果是视图控制器,则在viewDidLoad初始化。

因此,在实例变量的情况下:

@implementation MyViewController
{
    NSArray *_affirmationStrings;
}

...

- (void)viewDidLoad
{
    [super viewDidLoad];
    _affirmationStrings = @[ ... list of strings ... ];
}

然后通过_affirmationStrings引用它。

对于属性,对于其他类是可见的,只读,具有延迟初始化:

在.h:

@interface MyViewController : UIViewController

@property (readonly) NSArray *affirmationStrings

@end

在.m:

- (NSArray *)affirmationStrings
{
    if (!_affirmationStrings)
        _affirmationStrings = @[ ... list of strings ... ]
    return _affirmationStrings;
}

然后通过self.affirmationStrings引用它。

还有其他方法可以读取/写入(因此您可以设置其他类的值),或者仅在类中可见,等等。

如果你想处理很多字符串,你至少可能想要将代码移到外部文件(文本文件,JSON,XML,plist ......)之外。然后你可以立即从那里加载它并保留它,或者按需加载它(一旦你不再需要它就忘记它,因此如果你再次需要它就重新加载它)。

您还可以通过Core Data或直接使用SQLite将数据存储在数据库中。

这完全取决于你的目标/要求。