美文网首页
iOS中类方法和实例方法相互调用的注意点

iOS中类方法和实例方法相互调用的注意点

作者: dequal | 来源:发表于2019-10-10 14:48 被阅读0次

    最近接触了一个项目,发现这样一段代码:

    + (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,疑惑???接下来查阅资料总结两点:

    注意点一:类方法

    1. 类方法可以调用类方法。
    2. 类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法。
    3. 类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量。
    4. 类方法作为消息,可以被发送到类或者对象里面去(实际上,就是可以通过类或者对象调用类方法的意思)。

    注意点二:self 的规则

    1. 实例方法里面的self,是对象的首地址。
    2. 类方法里面的self,是Class.
      尽管在同一个类里面的使用self,但是self却有着不同的解读。在类方法里面的self,可以翻译成class self;在实例方法里面的self,应该被翻译成为object self。在类方法里面的self和实例方法里面的self有着本质上的不同,尽管他们的名字都叫self。

    相关文章

      网友评论

          本文标题:iOS中类方法和实例方法相互调用的注意点

          本文链接:https://www.haomeiwen.com/subject/ddejuctx.html