面向初学者的变量赋值和字符串数组Obj-c(iOS)
我创建了一个单视图应用程序,添加了一个标签、一个不可编辑的文本视图和一个按钮,我有一个字符串数组。实际上,只需单击按钮并随机更改字符串面向初学者的变量赋值和字符串数组Obj-c(iOS),ios,objective-c,string,variables,Ios,Objective C,String,Variables,我创建了一个单视图应用程序,添加了一个标签、一个不可编辑的文本视图和一个按钮,我有一个字符串数组。实际上,只需单击按钮并随机更改字符串 - (IBAction)viewNextPressed:(id)sender { NSArray *affirmationStrings = @[ @"String 1 Pressed", @"String 2 Pr
- (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+字符串)?对于数量相对较少的字符串,更好的选择是:
- 向类中添加属性或实例变量
- 在
方法中初始化所述属性或实例变量,或者在视图控制器的情况下,在init
中初始化所述属性或实例变量viewDidLoad
\u引用它
对于其他类可见的只读属性,具有延迟初始化:
在h中:
In.m:
然后通过self.strings
引用它
还有其他方法可以使其读/写(因此可以从另一个类中设置值),或者仅在类中可见,等等
如果您想处理大量字符串,您可能至少希望将列表移到代码之外的外部文件(文本文件、JSON、XML、plist…)中。然后,您可以立即从那里加载并保留它,或者根据需要加载它(一旦不再需要它,就忘记它,因此如果再次需要它,就重新加载它)
您还可以通过核心数据或直接使用SQLite将数据存储在数据库中
这完全取决于您的目标/要求。对于数量相对较少的字符串,更好的选择是:
- 向类中添加属性或实例变量
- 在
init
方法中初始化所述属性或实例变量,或者在视图控制器的情况下,在viewDidLoad
中初始化所述属性或实例变量
因此,对于实例变量:
然后通过\u引用它
对于其他类可见的只读属性,具有延迟初始化:
在h中:
In.m:
然后通过self.strings
引用它
还有其他方法可以使其读/写(因此可以从另一个类中设置值),或者仅在类中可见,等等
如果您想处理大量字符串,您可能至少希望将列表移到代码之外的外部文件(文本文件、JSON、XML、plist…)中。然后,您可以立即从那里加载并保留它,或者根据需要加载它(一旦不再需要它,就忘记它,因此如果再次需要它,就重新加载它)
您还可以通过核心数据或直接使用SQLite将数据存储在数据库中
这完全取决于您的目标/要求。如果您不想重新创建数组,可以将其存储在实现-viewNextPressed:
的类上的实例变量中。这可能是最简单也是最好的解决方案,假设您没有数量惊人的字符串,并且字符串相当短。如果存在VC的多个实例,您可能会考虑静态实例变量。谢谢答复,我目前只使用默认的VIEWController类。如何将其实现到ViewController.h中?最好添加一个属性。您需要的代码行是@property(非原子,强)NSArray*字符串
然后在-viewDidLoad
中设置数组,就像在方法中一样,但使用\u assignmentstrings
而不是NSArray*assignmentstrings
。我强烈建议您查看一下,以便准确了解它的含义和作用,如果您还不了解属性如果您想避免重新创建数组,可以将其存储在实现-viewNextPressed:
的类上的实例变量中。这可能是最简单也是最好的解决方案,假设您没有数量惊人的字符串,并且字符串相当短。如果存在VC的多个实例,您可能会考虑静态实例变量。谢谢答复,我目前只使用默认的VIEWController类。如何将其实现到ViewController.h中?最好添加一个属性。您需要的代码行是@property(非原子,强)NSArray*字符串
然后在-viewDidLoad
中设置数组,就像在方法中一样,但使用\u assignmentstrings
而不是NSArray*assignmentstrings
。如果您还不了解属性,我强烈建议您查看一下,以便准确理解它的含义和作用
@implementation MyViewController
{
NSArray *_affirmationStrings;
}
...
- (void)viewDidLoad
{
[super viewDidLoad];
_affirmationStrings = @[ ... list of strings ... ];
}
@interface MyViewController : UIViewController
@property (readonly) NSArray *affirmationStrings
@end
- (NSArray *)affirmationStrings
{
if (!_affirmationStrings)
_affirmationStrings = @[ ... list of strings ... ]
return _affirmationStrings;
}