program tip

ARC가 활성화 된 UUID 문자열 생성

radiobox 2020. 10. 29. 07:59
반응형

ARC가 활성화 된 UUID 문자열 생성


ARC가 활성화 된 일부 코드에서 UUID 문자열을 생성해야합니다.

몇 가지 조사를 한 후 이것이 내가 생각해 낸 것입니다.

CFUUIDRef uuid = CFUUIDCreate(NULL);
NSString *uuidStr = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);

__bridge_transferARC에서 물체가 누출되지 않도록 올바르게 사용 하고 있습니까?


나에게 괜찮아 보인다. 이것이 내가 사용하는 것입니다 ( 요점 으로 사용 가능 )

- (NSString *)uuidString {
    // Returns a UUID

    CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
    NSString *uuidString = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid);
    CFRelease(uuid);

    return uuidString;
}

추가하기 위해 편집

OS X 10.8 또는 iOS 6을 사용하는 경우 Core Foundation으로 이동하지 않고도 새로운 NSUUID 클래스를 사용하여 문자열 UUID를 생성 할 수 있습니다 .

NSString *uuidString = [[NSUUID UUID] UUIDString];
// Generates: 7E60066C-C7F3-438A-95B1-DDE8634E1072

당신은 단지 다음 파일이나 디렉토리 이름에 대한 고유 한 문자열을 생성하려는 경우 그러나 대부분, 당신은 사용할 수 NSProcessInfo의 ' globallyUniqueString방법을 같이 :

NSString *uuidString = [[NSProcessInfo processInfo] globallyUniqueString];
// generates 56341C6E-35A7-4C97-9C5E-7AC79673EAB2-539-000001F95B327819

공식 UUID는 아니지만 네트워크와 프로세스에 고유하며 많은 경우에 좋은 선택입니다.


저에게 맞는 것 같습니다.

당신은 CFRelease'd를 가지고 uuid있습니다.CFUUIDCreate()

그리고 문자열의 소유권을 ARC로 이전 했으므로 컴파일러는 uuidStr적절한 시간 에 릴리스 할 것을 알고 있습니다.


에서 그 소리 문서 :

(__bridge_transfer T)op는 보유 불가능한 포인터 유형을 가져야하는 피연산자를 보유 가능한 오브젝트 포인터 유형이어야하는 대상 유형으로 캐스트합니다. ARC는 로컬 값에 대한 일반적인 최적화에 따라 둘러싸는 전체 표현식의 끝에 값을 해제합니다.

그래서 당신은 그것을 올바르게하고 있습니다.

참고 URL : https://stackoverflow.com/questions/8684551/generate-a-uuid-string-with-arc-enabled

반응형