ARC, -fno-objc-arc? Dosyasını işaretlemelerine rağmen yapılarda veya birliklerde Objective-C nesnelerini yasaklar. Bu neden böyle?
Bunu -fno-objc-arc olarak işaretlerseniz bu kısıtlamaya sahip olmadığınızı varsaymıştım.
Yanıtlar:
Bu mesajı aldıysanız __unsafe_unretained'ı deneyin. Yalnızca yapıdaki nesneler tutulmamışsa güvenlidir. Örnek: ARC ile OpenFeint kullanırsanız, OFBragDelegateStrings Sınıfı bu hatayı bir yapı içinde söyler.
typedef struct OFBragDelegateStrings
{
NSString* prepopulatedText;
NSString* originalMessage;
} OFBragDelegateStrings;
-e
typedef struct OFBragDelegateStrings
{
__unsafe_unretained NSString* prepopulatedText;
__unsafe_unretained NSString* originalMessage;
} OFBragDelegateStrings;
NSArray
)? Bu durumda, hemen kaldırılmayacaktır, ancak derleyicinin ne söyleyeceğini merak ediyorum (şu anda test edemiyorum) ...
Aksine bir kullanmaktan daha yapı , bir oluşturabilir Objective-C sınıfı yerine verileri yönetmek için.
Bunun nedeni, arkın yapılardaki veya birleşimlerdeki nesneleri izleyememesidir (çünkü bunlar bu noktada düz C işaretçileridir).
Söz konusu dosyayı / sınıfı işaretlemiş olsanız bile, -fno-objc-arc
yine de ark ile kontrol edilen bir nesneyi parametre olarak ona iletebilirsiniz, bu da büyük olasılıkla bir bellek sızıntısına neden olur.
-fno-objc-arc
ARC ve ARC olmayan dosyaları bir proje içinde karıştırmak için kullanabilirsiniz , ancak herhangi bir yerde struct veya union gibi düz C yapıları kullanıyorsanız, ARC'yi hiç kullanamazsınız.
Görünüşe göre bu artık hatasız çalışıyor, muhtemelen bu değişiklikten sonra .
Yani, bir C yapısındaki Objective-C nesnelerine normal (güçlü) işaretçiler koyabilirsiniz. ARC tarafından yönetilir, örneğin yapı yıkıldığında tutulmaz. Şununla doğrulandı:
$ clang --version
Apple LLVM version 10.0.0 (clang-1000.11.45.2)