最近接触了一个项目,发现这样一段代码:
+ (void)registerCustomUserAgent {
NSString *ua = [self getUserAgent]; //???注意
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:ua, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
}
+ (NSString *)getUserAgent{
NSString *osVer = [UIDevice currentDevice].systemVersion;
NSString *appVersion = getAppVersion();
NSString *model = [UIDevice currentDevice].model;
NSMutableString *ua = [NSMutableString stringWithFormat:@"Mozilla/5.0 (%@; CPU iPhone OS ", model];
osVer = [osVer stringByReplacingOccurrencesOfString:@"." withString:@"_"];
[ua appendString:osVer];
[ua appendString:@" like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/11B508"];
NSString *appName = [UserAgent sharedAgent].appName;
[ua appendFormat:@"_lecar_%@_v%@", appName, appVersion];
[ua appendFormat:@" nettype/%@", [[LCNetworkUtil sharedInstance] networkTypeInfo]];
return ua;
}
可以看到类方法里面调用了类方法,可却是用的self,疑惑???接下来查阅资料总结两点:
注意点一:类方法
- 类方法可以调用类方法。
- 类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法。
- 类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量。
- 类方法作为消息,可以被发送到类或者对象里面去(实际上,就是可以通过类或者对象调用类方法的意思)。
注意点二:self 的规则
- 实例方法里面的self,是对象的首地址。
- 类方法里面的self,是Class.
尽管在同一个类里面的使用self,但是self却有着不同的解读。在类方法里面的self,可以翻译成class self;在实例方法里面的self,应该被翻译成为object self。在类方法里面的self和实例方法里面的self有着本质上的不同,尽管他们的名字都叫self。
网友评论