object-c - Objectivec이 이 단락에서 오류를 보고하는 이유는 무엇입니까?
阿神
阿神 2017-04-24 09:13:51
0
4
758
으아아아

self.age=age;여기에 오류가 보고되었습니다.
자바에서는 this.age=age 아닌가요? OC에서는 불가능한가요?

阿神
阿神

闭关修行中......

모든 응답(4)
大家讲道理

objective-c에서는 속성을 단순 할당 및 값 연산으로 호출하지만 실제로는 속성의 사용이 메소드 호출입니다!

예:

@property(copy) NSMutableArray *array;
이 속성이 추가되면 실제로 변수처럼 보입니다. 컴파일러는 단순히 변수를 추가하는 것 이상의 작업을 수행합니다.

  1. 클래스 전역 변수 NSMutableArray * _array 추가

  2. Get 메서드 추가-(NSMutableArray *)배열;

  3. Set 메소드 추가-(void)setArray:(NSMutableArray *)array;

귀하의 코드는 속성을 지정하기 위해 @property을 사용하지 않지만 속성의 set 메서드와 일치하는 메서드 이름이 부족하므로 이를 사용할 때 点语法을 계속 사용할 수 있습니다.

으아아아

으아아아

A와 B는 동일합니다! 컴파일 후 A는 B의 형태로 변환되고, B는 추가적으로 C 함수 호출의 형태로 변환됩니다!

-setAge: 메서드에서 -setAge:을 호출하면 무한 재귀가 발생합니다. 프로그램이 충돌할 때 스택을 보면 스택이 -setAge:로 가득 차 있는 것을 알 수 있습니다.

이 문제를 피하려면 클래스 변수 할당을 직접 사용하세요

으아아아
Peter_Zhu

자세한 설명은 위에서 언급한 바와 같습니다.
OC의 도트 구문은 단지 컴파일러 기능일 뿐이며 본질은 여전히 ​​메소드 호출입니다.

小葫芦

여기에서는 점 구문을 사용하지 말고, 멤버 변수 앞에 밑줄을 넣어 구분하세요. _age = 나이;

刘奇

여기에 적힌 @interface는 본인 추가 없이 바로 사용 가능합니다.
그냥 나이=나이

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿