self.age=age;
여기에 오류가 보고되었습니다.
자바에서는 this.age=age 아닌가요? OC에서는 불가능한가요?
大家讲道理2017-04-24 09:15:51
@property(copy) NSMutableArray *array;
이 속성이 추가되면 실제로 변수처럼 보입니다. 컴파일러는 단순히 변수를 추가하는 것 이상의 작업을 수행합니다.
클래스 전역 변수 NSMutableArray * _array 추가
Get 메서드 추가-(NSMutableArray *)배열;
Set 메소드 추가-(void)setArray:(NSMutableArray *)array;
귀하의 코드는 속성을 지정하기 위해 @property
을 사용하지 않지만 속성의 set
메서드와 일치하는 메서드 이름이 부족하므로 이를 사용할 때 点语法
을 계속 사용할 수 있습니다.
A와 B는 동일합니다! 컴파일 후 A는 B의 형태로 변환되고, B는 추가적으로 C 함수 호출의 형태로 변환됩니다!
-setAge:
메서드에서 -setAge:
을 호출하면 무한 재귀가 발생합니다. 프로그램이 충돌할 때 스택을 보면 스택이 -setAge:
로 가득 차 있는 것을 알 수 있습니다.
이 문제를 피하려면 클래스 변수 할당을 직접 사용하세요
으아아아天蓬老师2017-04-24 09:15:51
자세한 설명은 위에서 언급한 바와 같습니다.
OC의 도트 구문은 단지 컴파일러 기능일 뿐이며 본질은 여전히 메소드 호출입니다.