이 코드가 달성해야하는 것이 무엇인지 확실하지 않습니다. 초기화 방법에 대해 모든 규칙을 위반하는 것처럼 보입니다. 초기화 메소드에서 void 포인터를 반환하는 것은 무엇입니까? 초기화 메소드의 핵심은 객체를 반환하는 것입니다. 애플의 코드 예제에서 이것을 어디에서 보았습니까?
그렇다고해서 내가 누출되는 이유를 모르겠다. 객체를 반환하지 않으므로 메소드 외부로 누출 될 수 없습니다. 내부적으로 누수가있을 수 있습니다.
편집 :
It basically does an NSURLConnection. Because we are submitting a lot of forms with a lot of different values we put it in an external class. All the delegate methods like didFailWithError: are in NSURLRequest and connectionDidFinishLoading just passes the data to its delegate. So it doesn't really need to return anything as it is done through a delegate method.
그래, 당신은이를 재 설계 할 필요가있다. 현재이 방법은 재발을 기다리는 재앙 일뿐입니다. 다른 것이 없다면,이 코드를 보는 다른 모든 사람들은 당신이하는 일에 대해 완전히 혼란 스러울 것입니다.
생성 된 개체를 유지할 필요가없는 경우 할당을 이동하고 메서드 내에서 완전히 정리하십시오. 메서드 이름 접두사를 "초기화"에서 "설정", "구성", "획득"등으로 변경하여 이름이 생성 및 반환하고 객체한다는 것을 암시하지 않도록합니다.
특정 클래스의 원 샷 인스턴스가 필요한 경우 Michael Aaron Safyan과 같은 클래스 메소드를 사용하십시오 (다시 이름으로 초기화하지 않음). 클래스 메소드는 인스턴스를 내부적으로 초기화하고 필요한 작업을 수행하며 데이터를 어디서나 가져온 다음 인스턴스를 dealloc하십시오.
그런 식으로 누수에 대해 걱정할 필요가 없으며 코드를 읽을 수있는 모든 사람들 (코드 달기 몇 개월 포함)은 코드의 내용을 즉시 이해합니다.
'-initializeSomething'으로 시작하는 메소드로 코드를 사용하겠습니까/사용하지 마십시오 :'-initSomething' 메소드의 이름을 지정하기에 충분한 Objective-C를 모르는 사람은 누출을 정확히 피하지 않을 것입니다 : 그 동안 가혹한 것처럼 들릴지 모르겠지만 실제로는 툴 세트에 익숙하지 않은 단순한 오류가있을 수 있습니다. –
:/당신은 요점을 가지고 있지만 그 선택은 아니지? 그는 단어를 줄이기 위해 열렬한 증오를 가질 수도 있습니다. 그의 코드의 나머지는 누설되지 않습니다 – Rudiger
Rudiger : 적절한 명명 규칙에 따라/항상/좋은 생각입니다. –