객관적인 C가 함수를 호출하기 전에 객체에 대한 포인터가 nil인지 확인하기를 원한다면 궁금합니다. 예를 들어 함수에 nil 객체 전달하기
는 myFunction이 내 자신의 기능을하고 있는지에 확인을하지 않습니다 어디[self myFunction:ptr];
을
ptr = nil;
및 전화 나는
myObject* ptr;
및 초기화가 있다고 개체가 nil입니다. 나는 어딘가 객관적인 C가 nil이라면 함수를 호출하지 않을 것이라고 들었다. 이것이 사실이며 내 코드가 안전할까요?
내가 물어 보는 이유는 범용 앱을 구현하고 있으며 ipad에서만 작동하는 UIView 인스턴스가 있기 때문입니다. 하지만, 나는이 뷰에 대해 많은 함수 호출을하고 함수를 호출하기 전에 ipad인지 여부를 확인하기 위해 조건 검사를 수행하는 대신 iphone이라면 뷰를 nil로 설정할 수 있다면 좋을 것입니다.
또한 인터페이스 빌더가 객체를 할당하고 포인터를 nil로 설정하면 메모리 누수가 발생합니까 아니면 빌더가 객체를 dealloc할지 알 수 있습니까?
감사
예, 원래 포스터에게 명확한 이해를 위해 : 이해는 거꾸로입니다. ** 객체 **가'nil '이면 아무 일도 일어나지 않습니다. ** 인수 **가 nil 인 경우 메서드는 여전히 호출되며 예상대로 nil을 처리하거나 불어납니다. 논쟁을 둘러싼 마술은 없습니다. –
답변 주셔서 감사합니다. 그래, 내 질문에 대답했다. 죄송합니다. 프로 시저 프로그래밍에서 왔고 OOP에 대한 많은 경험이 없으므로 인수를 전달하고 수신기 개념을 잊어 버렸습니다. 그래, 대부분 내 코드는 [myObject myFunction] 형식이므로 myObject를 nil로 설정할 수 있어야합니다. 시스템이 내 물건을 지나칠지 걱정됩니다. – user396004
명시 적으로 전달한 인수 이외에 self 및 _cmd가 암시 적 인수로 모든 메서드에 있음을 알면 도움이 될 수 있습니다. 'self'(수신자)는 메소드가 호출 될 때 암시적인 인수 일뿐입니다. – NSResponder