我创建了一个视图应用,添加了一个标签,一个不可编辑的文本视图和一个按钮,我有一个字符串数组。真的只是想单击按钮并随意更改字符串。
- (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 +字符串存储字符串的方式?
答案 0 :(得分:2)
对于相对较少数量的字符串,更好的选择是:
init
方法中初始化所述属性或实例变量,如果是视图控制器,则在viewDidLoad
初始化。@implementation MyViewController
{
NSArray *_affirmationStrings;
}
...
- (void)viewDidLoad
{
[super viewDidLoad];
_affirmationStrings = @[ ... list of strings ... ];
}
然后通过_affirmationStrings
引用它。
@interface MyViewController : UIViewController
@property (readonly) NSArray *affirmationStrings
@end
- (NSArray *)affirmationStrings
{
if (!_affirmationStrings)
_affirmationStrings = @[ ... list of strings ... ]
return _affirmationStrings;
}
然后通过self.affirmationStrings
引用它。
还有其他方法可以读取/写入(因此您可以设置其他类的值),或者仅在类中可见,等等。
如果你想处理很多字符串,你至少可能想要将代码移到外部文件(文本文件,JSON,XML,plist ......)之外。然后你可以立即从那里加载它并保留它,或者按需加载它(一旦你不再需要它就忘记它,因此如果你再次需要它就重新加载它)。
您还可以通过Core Data或直接使用SQLite将数据存储在数据库中。
这完全取决于你的目标/要求。