2014-07-22 1 views
-1

블록이있는 함수 호출이 있고 끝에 null이 설정되지 않은 객체를 ARC에서 만들 수 있습니까? 메모리 누수가 발생합니까?블록이있는 함수 호출이 있고 끝에 null을 설정하지 않은 객체를 ios (ARC)에 만들 수 있습니까? 메모리 누수가 발생합니까?

WebService *webService = [[WebService alloc] init]; 
[webService request:getPriceSheet callbackBlock:^(BaseResponseMsg *responseMsg){ 
    ... 
}]; 

가 WebService 객체가 dealocated 된다 : 여기

은 예시 코드? 여기에 메모리 누출이 있습니까? 그 블록이 호출 된 이후에 처리 된 것입니까?

viewcontroller가 남아있을 때 객체가 배치되도록 객체를 객체에 넣어야합니까?

+0

컴파일러가 자동으로 처리하지 않습니다. – Mohit

답변

3

request:callbackBlock:이 무엇인지에 대한 추가 지식이 없으므로 webService은 현재 범위가 끝나고 콜백이 실행되지 않을 때 해제 될 수 있습니다. 보통 request:callbackBlock:과 같은 메서드는 webService 객체를 간접적으로 대기열에 넣거나 일시적으로 강하게 유지되는 다른 프로세스의 대리자로 사용합니다. webService가 더 이상 request 관련 인프라에서 참조하지 않으면 해당 서비스가 릴리스됩니다.

소금 한 알과 함께 복용하십시오. request:callbackBlock:의 특성을 알지 못하면 누가 webService에 대한 참조를 보유 할 수 있는지 알 수 없습니다.

+0

"가능성이 있으며 일반적으로"는 무엇을 의미합니까? 컴파일러가 일관되게 작동하지 않습니다. 아니면 큐에 추가하거나 큐에 넣지 않습니까? –

+0

질문에 대한 대답은'request : callbackBlock :'의 구현에 달렸습니다. 간단히 서비스를 유지 한 다음 완료되면 해제하십시오. 하지만 그건 보장되지 않습니다. 그것의 문서는 그것의 행동을 나타내야한다. 제공 한 코드에 누수가없는 것 같습니다. 어떤 것이 든, 서비스는 유지되지 않고 완료시 요청을 처리하기 위해 존재하지 않을 수 있습니다. 'WebService'가 표준 패턴을 따르지 않고 추가적인 관리가 필요할 수도 있습니다. 이것은 컴파일러가 아닌 서비스의 구현에 관한 것입니다. – Fabian