이 의사에서보세요 :NSValue는 해제 될 때 값을 해제합니까?
void* magicpointer = malloc(OVER_NINE_THOUSAND);
NSValue* v = [NSValue valueWithPointer:magicpointer];
[v release];
V가 해제 될 때뿐만 아니라, 해방, 아니면 수동으로 그렇게해야합니까 얻을 magicpointer입니까? 수동 참조 카운팅을 사용하고 있습니다.
이 의사에서보세요 :NSValue는 해제 될 때 값을 해제합니까?
void* magicpointer = malloc(OVER_NINE_THOUSAND);
NSValue* v = [NSValue valueWithPointer:magicpointer];
[v release];
V가 해제 될 때뿐만 아니라, 해방, 아니면 수동으로 그렇게해야합니까 얻을 magicpointer입니까? 수동 참조 카운팅을 사용하고 있습니다.
해제되지 않습니다. NSValue는 래퍼이므로 임의의 값을 객체로 처리 할 수 있습니다. 랩핑 된 포인터로는 아무 것도하지 않습니다.
NSValue가 해제 될 때 NSValue가 포인터를 해제하지 않습니다. NSValue에 저장된 포인터에 대한 설명서를 말한다 유일한 방법은 다음과 같습니다
당신이 할당 된 데이터 항목이있는 NSValue 오브젝트를 작성하는 경우는 NSValue 객체가 존재하는 동안하지 가 메모리 할당을 해제 할.
NSValue를 사용하는 주된 이유는 NSArray 또는 객체 만 받아들이는 유사한 컬렉션에 배치 할 수 있도록 값을 상자로 묶는 것입니다. NSValue 상자가 더 이상 필요 없기 때문에 단순히 메모리를 해제하는 것은 의미가 없습니다.
아니요, 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.
훨씬 더 유용한 답변이 다른 방법, 감사 빈센트을 소개하기 때문에! –