C++에서는 생성자에서 과도한 작업을하는 것이 좋습니다. 특히 메모리 할당 후 예외가 발생하면 메모리 누수가 발생할 수 있습니다. 자바에서는 여전히 권장하지 않지만 가비지 컬렉터로 인해 중요성이 적습니다. 목표 C에서 heavy lifting과 관련하여 init 메소드의 입장은 어디에 있습니까? Objetive-C에서객관적인 C 초기화 작업
4
A
답변
3
일반적인 지침은 비용이 많이 드는 경우에 게으른로드를 사용하는 것이 좋습니다. 일반적으로 init
은 결과가 필요하지 않으므로 값 비싼 전화를 피해야합니다. 호출자가이 객체를 만든 다음 멀리 던지거나 하나의 값만 봅니다. 필요하지 않은 대량의 데이터 구조를 만들지 않도록하십시오. 이 지침은 성능을 향상시키는 것입니다. 그것은 어렵고 빠른 규칙이 아닙니다.
init
을 허용하고 nil
을 반환하는 것은 허용되지만 드문 경우입니다. 올바른 접근 방법은 bbum의 대답을 참조하십시오 : Returning nil in the init in Objective C code.
3
는 이니셜 라이저 용 패턴은 초기화 실패하면 nil
반환해야
-(id)init
{
if (self = [super init]) {
// Initialization code here
}
return self;
}
이다. 즉, 초기화 프로그램이 실패하면 누출을 방지하기 위해 self
을 올바르게 릴리스해야합니다. 그래서 당신이 그 패턴을 따르는 한 당신은 안전하다고 생각합니다.
-(id)init
{
if (self = [super init]) {
if (myInitializationFunc() == ERR_FAIL) {
[self release];
return nil;
}
}
return self;
}
관련 문제
- 1. 객관적인 c 메모리 누수
- 2. 객관적인 C - 릴리스 문제
- 3. 객관적인 C 메모리 누수
- 4. 객관적인 C 기본 질문
- 5. 객관적인 C 파일 조직
- 6. 객관적인 C 소켓 프로그래밍
- 7. 객관적인 C 메모리 문제
- 8. 작동하지만 왜, 객관적인 c
- 9. WebSocket을하고 객관적인-C
- 10. 객관적인 c isKindOfClass missunderstanding?
- 11. 객관적인 c 메모리 관리
- 12. 객관적인 c 연산자 의미
- 13. 객관적인 미래의 C?
- 14. 객관적인 c 루프
- 15. 객관적인 C 디버깅
- 16. 객관적인 C 이미지 처리
- 17. 객관적인 C 메시지를 무시합니다.
- 18. 객관적인 C 메모리 누수
- 19. 객관적인 C 블록 선언 충돌
- 20. C++ 초기화
- 21. C# 초기화
- 22. C++ - SOCKADDR_IN 초기화
- 23. Linux의 초기화 및 교체 작업
- 24. 객관적인 C 언어로 가져 오기
- 25. 객관적인 c : csv 파일을 읽으십시오
- 26. 객관적인 C에 이식 C++ 게임
- 27. 객관적인 C 블록 안드로이드에 상응하는
- 28. 객관적인 c float numer 변환
- 29. 객관적인 C - 중복의 순열 계산
- 30. 객관적인 c 클래스 유형 검사
Apple의 UIView 클래스는 무거운 물건을 viewDidLoad 메서드에 넣으라고 제안하므로 유사한 규칙이 적용된 것으로 판단됩니다. –
현실적으로 말하자면, iPhone 목표 C에서'init' 메소드가 실패하면 어쨌든 응용 프로그램이 죽은 것입니다. 물론 예외가 있지만 사례별로 처리됩니다. 따라서 대부분 "순수한"당신이되고 싶고 앱이 특히 강건해야하는지에 대한 질문입니다. –
@HotLicks 누군가가 init을 버리지 않는 협약을 따르지 않는 한, 어떤 경우에는 실패 할 것입니까? – zode64