2012-04-13 3 views
1

이 의사에서보세요 :NSValue는 해제 될 때 값을 해제합니까?

void* magicpointer = malloc(OVER_NINE_THOUSAND); 
NSValue* v = [NSValue valueWithPointer:magicpointer]; 
[v release]; 

V가 해제 될 때뿐만 아니라, 해방, 아니면 수동으로 그렇게해야합니까 얻을 magicpointer입니까? 수동 참조 카운팅을 사용하고 있습니다.

답변

5

해제되지 않습니다. NSValue는 래퍼이므로 임의의 값을 객체로 처리 할 수 ​​있습니다. 랩핑 된 포인터로는 아무 것도하지 않습니다.

1

NSValue가 해제 될 때 NSValue가 포인터를 해제하지 않습니다. NSValue에 저장된 포인터에 대한 설명서를 말한다 유일한 방법은 다음과 같습니다

당신이 할당 된 데이터 항목이있는 NSValue 오브젝트를 작성하는 경우는 NSValue 객체가 존재하는 동안하지 가 메모리 할당을 해제 할.

NSValue를 사용하는 주된 이유는 NSArray 또는 객체 만 받아들이는 유사한 컬렉션에 배치 할 수 있도록 값을 상자로 묶는 것입니다. NSValue 상자가 더 이상 필요 없기 때문에 단순히 메모리를 해제하는 것은 의미가 없습니다.

5

아니요, NSValue은 표시되지 않습니다.

NSData을 사용할 수 있습니다처럼, 그것은 출시 때 포인터의 확보 할 수 있습니다 소리 :

 
    void* magicpointer = malloc(OVER_NINE_THOUSAND); 
    NSData *d = [NSData dataWithBytesNoCopy:magicpointer 
            length:OVER_NINE_THOUSAND 
           freeWhenDone:YES]; 
    //d is autoreleased, so no need to -release it. 
+0

훨씬 더 유용한 답변이 다른 방법, 감사 빈센트을 소개하기 때문에! –

관련 문제