self.x는 속성에 액세스하는 데 사용됩니다. 실제로는 getX 또는 setX 메서드에 액세스하지만 대부분의 경우 컴파일러는 자동으로 이 두 메서드를 구현하고 관련 인스턴스 변수를 자동으로 생성하므로 사용자는 이를 느끼지 못합니다. 도착하다. _x는 자동으로 생성된 인스턴스 변수입니다. 예를 들어 다음 속성을 정의합니다.
으아악
다음과 같은 숨겨진(단순화된) 코드가 많이 있습니다.
으아악
귀하의 지연 로딩 코드가 속성의 get 메소드를 오버로드한 것 같습니다. Self.x는 실제로 [self x] 메소드를 호출합니다. get 메소드에서 self.x를 사용하면 이 self.x가 [self를 호출합니다. x] 방법을 사용하면 무한 재귀입니다.
self.x는 속성에 액세스하는 데 사용됩니다. 실제로는 getX 또는 setX 메서드에 액세스하지만 대부분의 경우 컴파일러는 자동으로 이 두 메서드를 구현하고 관련 인스턴스 변수를 자동으로 생성하므로 사용자는 이를 느끼지 못합니다. 도착하다. _x는 자동으로 생성된 인스턴스 변수입니다.
으아악예를 들어 다음 속성을 정의합니다.
다음과 같은 숨겨진(단순화된) 코드가 많이 있습니다.
으아악귀하의 지연 로딩 코드가 속성의 get 메소드를 오버로드한 것 같습니다. Self.x는 실제로 [self x] 메소드를 호출합니다. get 메소드에서 self.x를 사용하면 이 self.x가 [self를 호출합니다. x] 방법을 사용하면 무한 재귀입니다.
참조하면 차이가 없습니다. 할당하면 차이가 있습니다. Self.xx=oo 먼저 xxretaincount -1을 넣은 다음 oo _XX 복사본을 직접 가리킵니다. oo. 유지 단계가 없습니다.
도 아니고나는 당신이 다음과 같을 것이라고 추측했습니다:
으아악그러면 self.some을 호출하는 것은 [self some]을 사용하는 것과 동일하며, 일부에서는 self.some이 [self some]을 다시 호출하는 것과 같습니다. . . 루프가 형성됩니다. . .
밑줄은 설정 및 가져오기를 우회하여 직접 액세스를 의미합니다. .