programing

Objective-C/iPhone 앱에서 "classic" malloc()/free()를 사용해도 될까요?

firstcheck 2022. 7. 27. 21:50
반응형

Objective-C/iPhone 앱에서 "classic" malloc()/free()를 사용해도 될까요?

저는 아이폰 개발에 대해 한동안 장난을 쳤는데, 당신이 "하드코어"일 때는 좀 어색하지만요.NET developer, 익숙해지면 그렇게 나쁘지 않아요.

대한 책을 마다 Objective-C에 대한 retain/release하다 CC/C++를 사용하여 '하는 것은 됩니다.malloc() ★★★★★★★★★★★★★★★★★」free()는 일부 각주에서만 언급됩니다.

는 그것을 있다.malloc() ★★★★★★★★★★★★★★★★★」free()Objective-C objective objective objective objective objective objective objective objective objective objective objective objective objective objective objective objective objective objective objective 。인 것 . 즉 100개의 정수를 할당하는 것입니다.

int *array = malloc(sizeof(int) * 100);

memset(array,0,sizeof(int) * 100);

// use the array

free(array);

이게 정말 최선의 방법일까요, 아니면 일반 C 메모리 관리를 피해야 할까요?

Memory 주주 objective- Objective-C around tasks there there there there there there there there there there there there there there 。NSMutableData소유권을 보유/해제할 수 있는 이점 외에 어레이를 쉽게 확장할 수 있습니다(직접 재할당 필요 없음).

코드는 다음과 같습니다.

NSMutableData* data = [NSMutableData dataWithLength:sizeof(int) * 100];
int* array = [data mutableBytes];
// memory is already zeroed

// use the array

// decide later that we need more space:
[data setLength:sizeof(int) * 200];
array = [data mutableBytes]; // re-fetch pointer in case memory needed to be copied

// no need to free
// (it's done when the autoreleased object is deallocated)

제제없없없없다다 Objective-C는 C의 엄밀한 슈퍼셋이기 때문에 플레인 C를 쓰고 싶다면 그렇게 하는 것을 막을 수 없습니다.부부의 in in in in in in in in in in in in in in 。malloc ★★★★★★★★★★★★★★★★★」freeObjective-C objective objective objective objective objective objective objective objective objective objective objective objective objective objective objective

예를 들어, 알 수 없는 수의 정수 배열을 동적으로 할당해야 하는 경우 다음과 같이 하는 것이 더 간단하고 쉽습니다.

int *array = malloc(N * sizeof(int));  // check for NULL return value!
// use array[0]..array[N-1]
...
free(array);

비교:

NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:N];
// use NSMutableArray methods to do stuff with array; must use NSNumbers instead
// of plain ints, which adds more overhead
...
[array release];

단어 이 하나의 자이언트되었습니다.char""를 사용하여 malloc()메모리 크기를 더욱 줄일 수 있는 몇 가지 현명한 최적화 기능을 갖추고 있습니다.분명히 이와 같은 이유로, 이 시스템을 사용하는 데 드는 오버헤드는NSArray제한된 아이폰에서는 완전히 비현실적입니다.오버헤드가 정확히 어느 정도인지는 모르겠지만 한 글자당 1바이트가 넘는 것은 확실합니다.

Objective-C는 C의 슈퍼셋에 불과하기 때문에 이러한 함수를 사용할 수 있습니다.그러나 Objective-C에는 오브젝트와 이를 용이하게 하는 방법이 포함되어 있기 때문에 이러한 종류의 작업을 수행하는 것은 매우 드문 일입니다.

결국 위의 코드를 다음과 같이 쓸 수 있습니다.

NSMutableArray *array = [[NSMutableArray alloc] init];

//Use the array, adding objects when need be

[array release];

이 경우,NSNumber저장하는 오브젝트ints(이후)NSArray오브젝트 이외의 타입은 추가할 수 없습니다).데이터 이동이 용이하고 어레이 클래스가 다른 Cocoa 클래스와 통합되어 메모리 관리가 표준 C 메모리 관리보다 간단하기 때문에 일반적으로 오브젝트를 사용하는 것이 일반적입니다.

또한 배열에 개체를 추가하거나 배열에서 개체를 제거하기 시작하면 코코아 배열 개체를 사용하면 이 작업을 훨씬 쉽게 수행할 수 있습니다.

표준 C 타입을 취급하고 있는 경우는, C 타입에 못지 않게 「OK」라고 하는 것이 일반적입니다.목표 C의 일부인 C에서는 이렇게 처리됩니다.

코코아의 다른 것들과 조화를 이루기 위해 물건 포장지를 씌우는 것도 드문 일이 아니다(KVO, 메모리 관리 등).따라서 IntArray 클래스는 다음과 같은 작업을 수행할 수 있습니다.malloc필요에 따라 보관했다가 해제할 수 있도록 합니다.이것은 꼭 필요한 것은 아닙니다.프로그램의 주요 부분이라면 편리할 뿐입니다.

을 사용하여 롭게 할 수 malloc은 메모리 관리를 자유롭게 할 수 있습니다.'NSObject'allocWithZone:.

언급URL : https://stackoverflow.com/questions/1150650/is-it-ok-to-use-classic-malloc-free-in-objective-c-iphone-apps

반응형