문제

추가로 이 질문 나는 많은 메모리 누출을 수정했습니다 bencoding.m (원래 여기)

나는 모든 명백한 메모리 누출을 수정했지만 Clang은 4 개의 "반환 된 물체의 누출"버그를 발견했습니다.

전체 메시지/적절한 코드 비트는 다음과 같습니다.

NSMutableData *data = [[NSMutableData alloc] init];

1] 메소드는 +1 유지 카운트 (소유 참조)의 대상 C 객체를 반환합니다.

[...]
snprintf(buffer, 32, "%lu:", [object length]);
[data appendBytes:buffer length:strlen(buffer)];
[data appendData:object];
return data;

3] 객체는 소유 참조 (발신자에게 전송 된 단일 유지 카운트)로 발신자에게 반환되었습니다.

도움이 되었습니까?

해결책

좋아, 위의 답변을 확장하려면 (올바른 트랙에 나를 설정해 주셔서 감사합니다) ...

return [data autorelease]

"데이터"라는 객체를 할당 했으며이 개체를 발신자에게 다시 반환하려고합니다. 이것이 OBJ-C에서 작동하는 방식은 어느 정도 수준에서 통화 스택에서 nsautoreleasepool이 있다는 것입니다. "AutorELEASE"메시지를 데이터로 보낼 때 해당 자동 제출 풀에 추가됩니다. 이를 통해 발신자는 "릴리스"를 명시 적으로 호출 할 필요없이 "데이터"객체를 간단히 (즉, 로컬 스택 프레임의 지속 시간 동안) 사용할 수 있으며 결국 AutoreLease Pool이 "팝스"가 표시되면 데이터가 처리되지 않습니다 (그렇지 않으면). 누군가 "유지"라고 부릅니다). 다소 영리합니다.

달콤한. 방금 OBJ-C 메모리 관리에서 녹색 벨트를 얻었습니다.

다른 팁

당신은 원합니다 :

return [data autorelease];

발신자에게 건네주기 때문에.

물체가 반환되기 전에 올바르게 자동 조절되지 않는 것처럼 들리며, 이는 위반합니다. 목표 C 메모리 관리 규칙.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top