CFStringRef için NSString ve ARK NSString için CFStringRef?
ARK CFStringRef
NSString
bir almanın doğru bir şekilde anlamaya çalışıyorum?
Ters yönde, CFStringRef
YAY NSString
gitmek için aynı mı?
Bellek sızıntısı oluşturmadan bunu yapmak için doğru yolu nedir?
CEVAP
Genellikle
NSString *yourFriendlyNSString = (__bridge NSString *)yourFriendlyCFString;
ve
CFStringRef yourFriendlyCFString = (__bridge CFStringRef)yourFriendlyNSString;
Eğer __bridge
anahtar var, nedenini öğrenmek istiyorsan, Apple documentation başvurabilirsiniz. Orada bulacaksınız:
__bridge
mülkiyet transferi ile Objective-C ve Temel arasında bir işaretçi aktarır.
__bridge_retained
yaCFBridgingRetain
atmalarını Objective-C Çekirdek bir Vakıf pointer da pointer transferler bir sahiplik. Sorumlu CFRelease veya nesnenin sahipliğini vazgeçmek ile ilgili bir fonksiyonu çağırıyorsunuz.
__bridge_transfer
yaCFBridgingRelease
hamle non-Objective-C işaretçi Objective-C ve ayrıca transferler bir ARC için mülkiyet. ARC nesnesi feragat mülkiyet sorumludur.
Yukarıda belirtilen durumlarda mülkiyet değiştirmeden nesne döküm olduğunuz anlamına gelir. Bu iki durumda da dizelerin anısına idaresinden sorumlu olacak anlamına gelir.
Ayrıca bazı nedenlerden dolayı devretmek için istediğiniz durumda olabilir.
Örnek olarak aşağıdaki kod
- (void)sayHi {
CFStringRef str = CFStringCreateWithCString(NULL, "Hello World!", kCFStringEncodingMacRoman);
NSString * aNSString = (__bridge NSString *)str;
NSLog(@"%@", aNSString);
CFRelease(str); //you have to release the string because you created it with a 'Create' CF function
}
böyle bir durumda döküm sahiplik aktarımı CFRelease
kaydetmek isteyebilirsiniz.
- (void)sayHi {
CFStringRef str = CFStringCreateWithCString(NULL, "Hello World!", kCFStringEncodingMacRoman);
NSString * aNSString = (__bridge_transfer NSString *)str;
// or alternatively
NSString * aNSString = (NSString *)CFBridgingRelease(str);
NSLog(@"%@", aNSString);
}
str
mülkiyeti transfer oldu, şimdi ARC tekme ve bellek yayınlayacak.
Diğer taraftan edebilirsiniz dökme NSString *
CFString
__bridge_retained
koyun, böylece sen-ecek kendi nesne ve size açıkça serbest kullanarak CFRelease
.
O kadar tamamlamak için olabilir
NSString &yani; CFString
// Don't transfer ownership. You won't have to call `CFRelease`
CFStringRef str = (__bridge CFStringRef)string;
// Transfer ownership (i.e. get ARC out of the way). The object is now yours and you must call `CFRelease` when you're done with it
CFStringRef str = (__bridge_retained CFStringRef)string // you will have to call `CFRelease`
CFString &yani; NSString
// Don't transfer ownership. ARC stays out of the way, and you must call `CFRelease` on `str` if appropriate (depending on how the `CFString` was created)
NSString *string = (__bridge NSString *)str;
// Transfer ownership to ARC. ARC kicks in and it's now in charge of releasing the string object. You won't have to explicitly call `CFRelease` on `str`
NSString *string = (__bridge_transfer NSString *)str;
CFStringRef için NSString ve ARK NSStr...
Nasıl NSString için bilimsel deneyler ...
NSString için UTF-8 kodlu bilimsel den...
Nasıl NSString için yüzde işareti ekle...
" 'inş NSString gönderme *&#...