iOS 修改只读变量
2016-08-11 14:37
351 查看
在iOS中只读变量是不应该被修改的,特别是框架类的只读变量,修改了可能带来莫名其妙的错误!
但是不应该不等于不能,通过动态运行时还是可以修改的:
比如:
@interface ReOnlyObject :
NSObject
@ property (nonatomic, readonly) NSNumber *number;
@end
在使用时:
ReOnlyObject *onlyNumber = [[ReOnlyObjectalloc]
init];
//onlyNumber.number = @10; //这是不允许的
但是这样就可以:
[onlyNumber setValue:@20forKey:@"number"];
原因很简单,readonly是编译时的特性,也就是编译时只生产get方法,但不会生产set方法。
而
- (void)setValue:(nullableid)value forKey:(NSString
*)key;
是运行时的方法,骗过了编译器。
但是不应该不等于不能,通过动态运行时还是可以修改的:
比如:
@interface ReOnlyObject :
NSObject
@ property (nonatomic, readonly) NSNumber *number;
@end
在使用时:
ReOnlyObject *onlyNumber = [[ReOnlyObjectalloc]
init];
//onlyNumber.number = @10; //这是不允许的
但是这样就可以:
[onlyNumber setValue:@20forKey:@"number"];
原因很简单,readonly是编译时的特性,也就是编译时只生产get方法,但不会生产set方法。
而
- (void)setValue:(nullableid)value forKey:(NSString
*)key;
是运行时的方法,骗过了编译器。
相关文章推荐
- ios 开发超实用技巧:Xcode里批量修改 || 工程名 || 变量名 || 修改类名 || 自动封装代码Refactor功能
- iOS运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
- 【原】iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
- 【原】iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等
- declare的用法:定义环境变量;把环境变量修改为本地变量;是变量变为只读(和readonly一样)。
- iOS_Runtime修改变量值,交换方法实现,动态添加类,成员变量和方法
- iOS runtime访问/修改私有变量
- iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
- iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
- iOS运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
- iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
- JDK修改环境变量的作用
- const常量和static静态只读变量有何区别
- 如何在Oracle中修改Collection类型的变量。
- ASP 修改文件的属性——把文件的由可读修改为只读
- 修改Smarty的变量调节器truncate无乱码截取中文
- 从一个修改私有变量的问题想到的
- VBScript修改注册表设置环境变量
- 从vs2003升级到vs2005的一个问题: 只读文本框(readonly textbox)不能在客户端修改值
- HWND_BROADCAST的一个用法——修改环境变量,立即通知系统