iOS에서 클래스 메서드와 인스턴스 메서드가 서로 호출되는 주의 사항

1775 단어
최근에 접촉한 항목에서 이러한 코드를 발견했다.
+ (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: 유형 방법


4
  • 클래스 방법은 클래스 방법을 사용할 수 있다

  • 4
  • 클래스 방법은 실례 방법을 호출할 수 없지만 클래스 방법은 창설 대상을 통해 실례 방법에 접근할 수 있다

  • 4
  • 유형 방법은 실례 변수를 사용할 수 없다.클래스 방법은self를 사용할 수 있습니다.self는 실례 변수가 아니기 때문입니다

  • 4
  • 클래스 방법은 메시지로 클래스나 대상에게 전송될 수 있다(실제로는 클래스나 대상을 통해 클래스 방법을 호출할 수 있다는 뜻)

  • 주의점2:self의 규칙


    4
  • 실례적인 방법 중의self는 대상의 첫 번째 주소이다

  • 4
  • 유형 방법 중의 self는 Class입니다.같은 클래스에서 셀프를 사용하지만 셀프는 다른 해석을 가지고 있다.클래스 방법 중의self는classsself로 번역할 수 있다.실례적인 방법에서의self는objectself로 번역되어야 한다.클래스 방법 안의 self와 실례 방법 안의 self는 본질적으로 다르다. 비록 그들의 이름은 모두 self지만
  • 좋은 웹페이지 즐겨찾기