
最近看 AFNetworking 代码,有个地方有点儿疑惑,希望各位大大帮我分析一下。
建立单例,在一次性运行代码运行之前加上这句 static NSArray *_AFHTTPRequestSerializerObservedKeyPaths = nil; 尤其是 =nil,那么在单例建成后每次调用不都会将它置为 nil 吗?
变量声明这边NSArray *_xxx这种声明方式是否有什么特别之处? 本人菜鸟,谢谢大大们赐教啊。
static NSArray * AFHTTPRequestSerializerObservedKeyPaths() { //1.在单例建成后每次调用不都会将它置为 nil 吗? //2.NSArray *_xxx声明方式有什么特别之处? static NSArray *_AFHTTPRequestSerializerObservedKeyPaths = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _AFHTTPRequestSerializerObservedKeyPaths =@[NSStringFromSelector(@selector(allowsCellularAccess)),NSStringFromSelector(@selector(cachePolicy)),NSStringFromSelector(@selector(HTTPShouldHandleCookies)),NSStringFromSelector(@selector(HTTPShouldUsePipelining)), NSStringFromSelector(@selector(networkServiceType)), NSStringFromSelector(@selector(timeoutInterval))]; }); return _AFHTTPRequestSerializerObservedKeyPaths; } 1 mornlight 2017-01-04 22:01:18 +08:00 static NSArray *_AFHTTPRequestSerializerObservedKeyPaths = nil; 即使方法多次调用, _AFHTTPRequestSerializerObservedKeyPaths 也只被初始化赋值一次。 参考: http://rypress.com/tutorials/objective-c/functions |
3 vincentxue 2017-01-04 23:28:48 +08:00 问题 1 是 static 关键字的用途,这个是 C 语言的基础知识。建议搜索“ static 关键字”了解一下。 问题 2 是变量命名的问题,这个并没有什么特别之处,取决于团队的编码规范。非要说特别之处的话,在 OC 中有属性这种特性的存在,声明属性可以合成相应的实例变量,变量名是属性名的前面加上一个下划线。例如 @property NSObject *a; 合成的实例变量名是 _a 。 |
4 caileijuve 2017-01-05 09:36:55 +08:00 一般内部成员变量喜欢以_开头命名 |