属性 在静态库上是只读的
property is readonly on static library
我有一个 class 有一些属性,其中一些必须是 read-only 否则它们可能会导致系统问题。
示例如下:
Button.h
@property (nonatomic, strong, readonly) NSString *button_id;
我遇到的问题是我要将代码作为静态库交付,
但我不希望有人能够更改 header 代码并允许变量可写。
如你所见,我不太了解Objective C,避免这种情况的最佳策略是什么?
在 Objective-C 中,您可以轻松地绕过 readonly
注释,并且普遍认为其他人不会以这种方式弄乱代码,除非他想.. .
我的意思是你现在就标记为readonly
就行了,不用太担心。如果您正在处理一些确实不应该更改的敏感内容,您需要使用例如不同的方式来做。加密但至少是一种使它比 readonly
.
更强大的方法
下面的代码不依赖于 属性,而是依赖于 class 方法。您也可以使用实例方法,但此处 class 更有意义。这会立即导致它 不可设置 ,因此您可以避免很多人可能有意或无意设置它的情况。您还可以将其从 header 文件中取出并牢固地放入(已编译的)class 文件中。
direct
属性进一步意味着它不能在子 class 中被覆盖。这已经差不多了。对于 UI 中的按钮 ID 来说,这完全是矫枉过正,而对于例如一个银行帐户,但您可以做到这一点。
Header 文件/接口
+ ( NSString * ) password __attribute__ ( ( objc_direct ) );
实施
+ ( NSString * ) password __attribute__ ( ( objc_direct ) )
{
return @"abc";
}
使用
NSLog ( @"The password is %@", MyClass.password );
编辑
FWIW 如果你只想拥有一堆 read-only ID,只需在 header
中使用类似下面的内容
+ ( NSString * ) id1;
+ ( NSString * ) id2;
并像这样实现它
+ ( NSString * ) id1 { return @"1"; }
+ ( NSString * ) id2 { return @"2"; }
我有一个 class 有一些属性,其中一些必须是 read-only 否则它们可能会导致系统问题。
示例如下:
Button.h
@property (nonatomic, strong, readonly) NSString *button_id;
我遇到的问题是我要将代码作为静态库交付, 但我不希望有人能够更改 header 代码并允许变量可写。
如你所见,我不太了解Objective C,避免这种情况的最佳策略是什么?
在 Objective-C 中,您可以轻松地绕过 readonly
注释,并且普遍认为其他人不会以这种方式弄乱代码,除非他想.. .
我的意思是你现在就标记为readonly
就行了,不用太担心。如果您正在处理一些确实不应该更改的敏感内容,您需要使用例如不同的方式来做。加密但至少是一种使它比 readonly
.
下面的代码不依赖于 属性,而是依赖于 class 方法。您也可以使用实例方法,但此处 class 更有意义。这会立即导致它 不可设置 ,因此您可以避免很多人可能有意或无意设置它的情况。您还可以将其从 header 文件中取出并牢固地放入(已编译的)class 文件中。
direct
属性进一步意味着它不能在子 class 中被覆盖。这已经差不多了。对于 UI 中的按钮 ID 来说,这完全是矫枉过正,而对于例如一个银行帐户,但您可以做到这一点。
Header 文件/接口
+ ( NSString * ) password __attribute__ ( ( objc_direct ) );
实施
+ ( NSString * ) password __attribute__ ( ( objc_direct ) )
{
return @"abc";
}
使用
NSLog ( @"The password is %@", MyClass.password );
编辑
FWIW 如果你只想拥有一堆 read-only ID,只需在 header
中使用类似下面的内容+ ( NSString * ) id1;
+ ( NSString * ) id2;
并像这样实现它
+ ( NSString * ) id1 { return @"1"; }
+ ( NSString * ) id2 { return @"2"; }