다른 방법으로 변수를 설정하는 것보다 나은 방법이라고 생각하기 때문에 객체에 대한 사용자 정의 이니셜 라이저를 작성했습니다. 이 이니셜 라이저에서는 보통 객체의 변수를 설정 한 다음 주 init에 호출을 반환합니다.사용자 정의 객체 초기화 도구
value
-(id)initWithValue:(int)val {
self.value = val;
return [self initWithNibName:nil bundle:nil];
}
은의 ViewController 서브 클래스에 속하는 정수이고,보다 일반적으로 더 값이 있습니다
그래서, 예를 들어, UIViewController에 내 코드는 다음과 같을 것입니다 서브 클래스.
그러나 최근에 나는 self = [self init...]
이 클래스의 현재 인스턴스를 대체 할 것이므로 자신의 인스턴스를 잃을 것이라고 생각하여 스스로 먼저 설정하기 시작했습니다. 그래서 나는 일을 시작했다 :
-(id)initWithValue:(int)val {
self = [self initWithNibName:nil bundle:nil];
self.value = val;
return self;
}
은 그때 최근에 원래의 버전을 확인하고 모든 것이 제대로 작동 않음을 깨닫고 변화는 불필요한이었다.
그래서, 내 질문은 이것이다 :
- 뭐라고를 않습니다 [슈퍼 initWithNibName : 번들 :]는이 객체를 생성하지만, 원래 객체를 대체하지하는 원인이되는합니까?
- 두 버전 중 하나가 다른 버전보다 사용이 편리할까요? 하나가 더 좋은 경우 사용해야합니다.
고맙습니다.
그게 내가 생각한 것인데 값을 설정하고, 다음에'self = [self initWithNibName : bundle :]'을 실행하여 값을 출력했다. 나는 자아가 항상 바뀌지는 않을 것이라고 추측하고 있지만, 일반적으로 당신의 방식대로하는 것이 더 안전합니다. – Jsdodgers
또한 '_value'에 대한 팁을 보내 주셔서 감사합니다. 이 점에 대해 분명히하기 위해서,'_value'를 사용할 때,'[self setValue :]'는 호출되지 않을 것입니다, 맞습니까? 그렇다면 self.value를 사용하지 않는 유일한 이유가 있거나 다른 것이 있습니까? – Jsdodgers
값이 귀하의 경우 속성이므로이 표준 코드와 같은 용도로 합성하는 동안 ... @ 합성 값 = _value; [self setValue :]를 사용하여 값을 가져올 수도 있습니다. –