Bazı Dosyalar için Otomatik Referans Saymayı Devre Dışı Bırakma


183

İOS 5 SDK'sını indirdim ve ARC'nin yeni Apple derleyicisinin harika bir özelliği olduğunu gördüm. Şimdilik, birçok üçüncü taraf çerçevesi ARC'yi desteklemiyor. Yeni kodum için ARC kullanabilir ve mevcut tutma / bırakma kodunu değiştirmeden bırakabilir miyim? ARC dönüştürücü burada çalışmaz, çünkü JSONKit gibi bazı çerçeveler dönüştürücü kullanılarak ARC'ye dönüştürülemez.

Düzenle:

Cevap -fno-objc-arcARC istemediğiniz dosyalar için derleyici bayraklarına eklemektir . Xcode 4'te, bunu hedefiniz -> Derleme Aşamaları -> Derleme Kaynakları altında yapabilirsiniz.



2
Açıklığa kavuşturmak için .mdosyayı dosyaya eklemeniz yeterlidir . .hDosya değil .
ma11hew28

Ben bu konuşmayı buldum: github.com/gowalla/AFNetworking/issues/36 Belki bir iOS5 ARC Desteklenen Projede JSONKit entegre nasıl yardımcı olabilir ;-) Ama şu anda

Bu yöntem benim için çalıştı. UDP Çok Noktaya Yayın için AsyncUdpSocket projeme ekliyordu ve bu dosyalar [en azından geçerli sürüm] ARC desteklemiyor. Bu yüzden AsyncUdpSocket.m dosyasına derleyici bayrağı eklemek için yukarıdaki yöntemi kullandım ve benim uygulama ile iyi çalışması için kod alabilirsiniz.
Ashu Joshi

2
Mükemmel çalışıyor! Özellikler: Hedefinize gidin ve Derleme Aşamaları'nı, ardından Kaynakları Derle'yi seçin. Söz konusu .m dosyasına çift tıklarsanız, "/fno-objc-arc"
mpemburn

Yanıtlar:


73

Genel ARC dokümanları , bu noktada doğrudan net olmamakla birlikte, her sınıfın tüm ARC veya tüm manuel olarak yönetildiği sürece, sınıfların tek bir programa entegre edilebileceğini öne sürmektedir.

ARC ve ARC olmayanları tek bir sınıfta karıştıramazsınız; Belge söylüyor göndererek retain, release, autorelease, veya retainCount(zamanlayıcılar ve kullanım gecikmeli gerçekleştirir, dahil herhangi bir şekilde mesajlar @selectorARC kodunda yasaklanmıştır). Bu nedenle, ARC sınıfında ARC dışı yapamazsınız (gerekli mesajlar yasaklandığından) ve ARC olmayan bir sınıfta ARC yapamazsınız (çünkü ARC, ARC olmadan geçersiz sözdizimi öğeleri ekler).

ARC olmayan kütüphaneleri / çerçeveleri ARC programına entegre edip edemeyeceğiniz konusunda aynı belge biraz daha açıktır: Evet. Tüm kodlarınızın ARC olmayan bir programda ARC kütüphanelerini / çerçevelerini kullanıp kullanamayacağınızdan bahsetmez, ancak yukarıdakilerin tümü göz önüne alındığında, ima evet gibi görünmektedir.


Teşekkür ederim! Mevcut ARC olmayan sınıflar için ARC'yi nasıl devre dışı bırakacağımı anladım.
nonamelive

Ne yaptığınızı bizimle paylaşır mısınız?
David H

1
@David H: Eğer bunu soru soran kişiye hitap etmek istediyseniz, soru soran kişinin soruyu kendi çözümünü düzenlediğine dikkat etmelisiniz.
Peter Hosey

ARC derlemesi HEADER dosyalarında devre dışı bırakılamaz. Clang, uygulama / yöntem dosyasının derlenmesine bağlı olarak arabirimi / başlığı derlemez. Bu nedenle, üstbilgi dosyaları karma bir derlemede hem ARC hem de ARC olmayanlarla uyumlu olmalıdır. Bunu derleyicide bir hata olarak görüyorum.
carmin

1
@carmin: Öyle değil. Derleyici, normalde yalnızca #importmodül dosyalarından girerek yaptığınız durumlar dışında başlık dosyalarına bakmaz . Derleyici bayrakları ayarı her modül dosyası içindir (daha kesin olarak, “Kaynakları Derle” oluşturma aşamasındaki her dosya). Derleyicinin, başlatıldığı modül dosyası için verilen seçimi devralmak dışında, ARC kullanması gerekip gerekmediğini bilmesinin başka bir yolu yoktur.
Peter Hosey

78

MULTIPLE dosyalarında ARC'yi nasıl devre dışı bırakacağım çok sezgisel değil , bir süre bunu nasıl yapacağımı anlayana kadar birer birer yaptım.

  1. Xcode'da Hedef / Derleme Aşamaları / Derleme Kaynakları'nda istediğiniz dosyaları seçin (CMD + tıklama veya Shift + tıklama)
  2. PRESS ENTER (çift tıklama seçimi sıfırlar, böylece çalışmaz)
  3. Tip -fno-objc-yay
  4. Enter veya Done tuşuna basın

1
Burada sorulan soruya gerçekten bir cevap değil, yine de kanlı bir ipucu! +1
Kristof Van Landschoot

Haklısın, değil, ama her zaman anahtar için googledim ve bu cevap en iyi hitlerden biri. Bugünlerde çoğu insanın cevabı bildiğini düşündüm ama bu "ipucu" değil
Tibidabo

35

Bazı Dosyalar için Otomatik Referans Saymayı devre dışı bırakmak istiyorsanız, sadece adımları izlemeniz yeterlidir. Hedefler -> Derleme Aşamaları -> Derleme Kaynakları'na derleyici bayrakları eklersiniz.

xcode

Kullanılan bayrak yazdıktan sonra -fno-objc-arc basın enter olduğunu.! Derleyici Bayrakları altındaki satırın sağ sütununa çift tıklamanız gerekir. Umarım yardımcı olur :)


14
ARC olmayan bir projede belirli bir dosyada ARC'yi bayrağı kullanarak etkinleştirmek için aynı yöntemi kullanabilirsiniz -fobjc-arc.
lnafziger

ARC derlemesi HEADER dosyalarında devre dışı bırakılamaz. Clang, uygulama / yöntem dosyasının derlenmesine bağlı olarak arabirimi / başlığı derlemez. Bu nedenle, üstbilgi dosyaları karma bir derlemede hem ARC hem de ARC olmayanlarla uyumlu olmalıdır. Bunu derleyicide bir hata olarak görüyorum.
carmin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.