美文网首页
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中类方法和实例方法相互调用的注意点

    最近接触了一个项目,发现这样一段代码: 可以看到类方法里面调用了类方法,可却是用的self,疑惑???接下来查阅资...

  • 关于静态方法

    静态方法会在类加载之后就分配响应的内存空间,因此注意两点 不能在静态方法中调用实例成员和实例方法 不能再静态方法中...

  • iOS self 和 super区别以及为什么要self = [

    区别: 注意点一:类方法 1、类方法可以调用类方法。2、类方法不可以调用实例方法,但是类方法可以通过创建对象来访问...

  • ES6解读3:类class

    类的继承 类的getter和setter方法 静态方法以及静态属性 注意:静态方法只能是类调用,不能实例调用

  • Objective-C 类方法中使用self注意事项

    在类(实例)方法中使用self调用方法 在实例方法中self【可以】调用实例方法(最常见)self【不可以】调用类...

  • 对象方法(实例方法) 类方法(静态方法)的区别

    参考资源 Objective-C中类方法、对象方法介绍及区别iOS---类方法(静态方法)和实例方法iOS 类方法...

  • PHP 方法重载的注意事项

    先给出个简答的例子: 注意在子类中实例中调用父类的方法,如果父类方法中包含子类重载后的方法时,会优先调用子类方法。...

  • 第十四节 Swift中的方法

    Swift 中的方法就是函数,分为实例方法和类型方法。 实例方法在特定类型实例中调用,代码示例 Couter 类定...

  • Swift 中的方法声明

    实例方法 类方法 静态方法 实例方法由实例对象进行调用;类方法和静态方法由类对象进行调用

  • 再论静态方法和类方法

    实例对象可以调用实例方法、类方法、静态方法 类对象只能调用类方法、静态方法

网友评论

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

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