Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我应该使用NSString常量*来定义UILabel文本吗?_Ios_Objective C_Nsstring_Constants - Fatal编程技术网

Ios 我应该使用NSString常量*来定义UILabel文本吗?

Ios 我应该使用NSString常量*来定义UILabel文本吗?,ios,objective-c,nsstring,constants,Ios,Objective C,Nsstring,Constants,假设我有以下标签文本分配: @property (nonatomic, weak) IBOutlet UILabel *blah; . . . [blah setText:@"Blah"]; 我在这里直接指定文本有什么问题?这不是一个本地化字符串,而是一个常量向上定义它,如: NSString const* kBlahLabelText = @"Blah"; . . @property (nonatomic, weak) IBOutlet UILabel *blah; . . . [blah

假设我有以下标签文本分配:

@property (nonatomic, weak) IBOutlet UILabel *blah;
.
.
.
[blah setText:@"Blah"];
我在这里直接指定文本有什么问题?这不是一个本地化字符串,而是一个常量向上定义它,如:

NSString const* kBlahLabelText = @"Blah";
.
.
@property (nonatomic, weak) IBOutlet UILabel *blah;
.
.
.
[blah setText:kBlahText];
是否存在任何特定的内存原因/可读性问题,为什么后者更好

如果我们使用的是dequeuereusablecellwithidentifier呢?那么我的单元格标识符应该是常量吗?或者我指的是UIStoryboard的名字?我个人总是觉得最好像上面的前一种情况那样将它们内联。但我想有一个很好的理由来解释为什么,而不仅仅是个人偏好


作为一个附加组件,当我将kBlahText指定给标签时,编译器是复制kBlahText并将其添加到标签中,还是只是更改了内部引用?

如果不需要对其进行本地化,并且没有将所有字符串文本保留在一个位置以便于维护或其他类似操作,那么就没有理由不直接内联使用字符串文本,而不是将其声明为常量变量或其他内容。编译器汇集字符串文本,因此使用@Blah 12个不同的位置在时间或存储上并不比使用单个常量变量更昂贵。当然,可读性问题是旁观者的眼睛/头脑中的问题,因此您需要使用自己的标准来评估这些问题。NSString const*kBlahLabelText等于NSString*kBlahLabelText,因为NSString对象是不可变的。NSString*const kBlahLabelText将阻止将kBlahLabelText分配给另一个字符串值。如果您不在其他地方更改其值,则可以使用NSString*kBlahLabelText。对于最后一个问题,UILabel始终复制您的NSString。您可以在头文件@propertynonatomic,copy NSString*text中看到它。除非您在多个位置使用此字符串,否则无需将该字符串定义为全局常量字符串。如果您在很多地方使用它,那么您可以全局声明它以提高可读性并避免键入错误。非常感谢!如果你们中有人想发布答案,我会接受的。