Objective c 属性在静态库上为只读
我有一个具有一些属性的类,其中一些属性必须是只读的,否则可能会导致系统问题 例如:Objective c 属性在静态库上为只读,objective-c,header,static-libraries,readonly-attribute,Objective C,Header,Static Libraries,Readonly Attribute,我有一个具有一些属性的类,其中一些属性必须是只读的,否则可能会导致系统问题 例如: Button.h @property (nonatomic, strong, readonly) NSString *button_id; 我的问题是,我将以静态库的形式交付代码, 但我不希望有人能够更改头代码并允许变量可写 正如你所看到的,我不太清楚在Objective-C中,你可以很容易地绕过只读注释,一般认为其他人不会以这种方式干扰代码,除非他想 我想说的是,您应该像现在一样将其标记为只读,不要太担
Button.h
@property (nonatomic, strong, readonly) NSString *button_id;
我的问题是,我将以静态库的形式交付代码,
但我不希望有人能够更改头代码并允许变量可写
正如你所看到的,我不太清楚在Objective-C中,你可以很容易地绕过
只读注释,一般认为其他人不会以这种方式干扰代码,除非他想
我想说的是,您应该像现在一样将其标记为只读
,不要太担心。如果您正在处理一些确实不应该更改的敏感内容,您需要使用不同的方法来处理,例如加密,但下面至少是一种使其比仅只读
更强大的方法
下面的代码不依赖于属性,而是依赖于类方法。您也可以使用实例方法,但这里的类更有意义。这会立即导致它不可设置,因此您可以避免很多情况下,有人可能会故意或无意地设置它。您还可以将其从头文件中取出,并牢牢地放入(编译的)类文件中
direct
属性进一步意味着它不能在子类中被重写。这是最好的了。对于用户界面中的按钮ID来说,这是完全的过度使用,对于银行帐户来说,这是不够的,但它的强度是你所能做到的
头文件/接口
+ ( NSString * ) password __attribute__ ( ( objc_direct ) );
实施
+ ( NSString * ) password __attribute__ ( ( objc_direct ) )
{
return @"abc";
}
使用
编辑
FWIW如果您只想拥有一堆只读ID,只需在标题中使用下面的内容即可
+ ( NSString * ) id1;
+ ( NSString * ) id2;
然后像这样实现它
+ ( NSString * ) id1 { return @"1"; }
+ ( NSString * ) id2 { return @"2"; }
+ ( NSString * ) id1 { return @"1"; }
+ ( NSString * ) id2 { return @"2"; }