iOS 5 En İyi Uygulama (Yayınlama / saklama?)


109

Yeni başlayan bir iPhone programcısı olarak, iOS 5 veya daha eski sürümlerle kullanılacak uygulamaları yazmak için en iyi uygulama nedir? Özellikle, verileri serbest bırakmaya / saklamaya devam etmeli miyim yoksa bunu görmezden mi gelmeliyim? Önemli mi?


1
ARC'yi kullanın ve burada ana hatlarıyla açıklanan en iyi uygulamaları izleyin: amattn.com/2011/12/07/arc_best_practices.html Bunu yaparsanız, ARC'nin "sadece işe yaradığını" göreceksiniz. Bu uygulamaları takip etmezseniz, sızıntılarla karşılaşırsınız ve bunları bulmak için çok zaman harcarsınız ....
n13

Yanıtlar:


98

Sana kalmış. ARC'yi (Otomatik Referans Sayma) kullanarak uygulamalar yazabilirsiniz ve Xcode, ARC özellikli uygulamalarınızın iOS 4'te çalışmasına izin vermek için "yapıştırıcı kodu" yazar, hiçbir değişiklik gerekmez. Ancak, bazı şeyler işe yaramaz ve en belirgin şekilde kullanmak isteyebileceğiniz birçok kitaplık (bazen) sayısız hata ortaya çıkarır ve geliştiriciler ARC ile uyumlu bir güncelleme yayınlayana kadar bunları kullanamazsınız.


Düzenleme : Yakın zamanda ARC'yi dosya başına kapatabileceğinizi keşfettim. Bkz pixelfreak cevabını . Öyleyse, tavsiyem hala geçerli, ancak artık 3. taraf kitaplıkların ARC ile çalışması için güncellenmesine gerek yok.

Apple'ın belirli dosyalar için ARC'yi devre dışı bırakma konusunda söyledikleri:

ARC'yi kullanmak için bir projeyi geçirdiğinizde, -fobjc-arc derleyici bayrağı tüm Objective-C kaynak dosyaları için varsayılan olarak ayarlanır. Bu sınıf için -fno-objc-arc derleyici bayrağını kullanarak belirli bir sınıf için ARC'yi devre dışı bırakabilirsiniz. Xcode'da, hedef Derleme Aşamaları sekmesinde, kaynak dosya listesini ortaya çıkarmak için Derleme Kaynakları grubunu açın. Bayrağını ayarlamak istediğiniz dosyaya çift tıklayın, açılır panele -fno-objc-arc yazın ve Bitti'ye tıklayın.

görüntü açıklamasını buraya girin

Tam geçiş kılavuzuna buradan bakın .


15
ARC açıkça "dosya başına" olarak kapatılabilir, belki eski kitaplıkların kullanımına izin verir ... Ama onunla oynamadım, bu yüzden henüz bilmiyorum. Yine de oldukça heyecanlıyım. İOS geliştiricilerin terletmek / bırakmak zorunda kalmadığı bir dünya hayal edebiliyor musunuz? SO'da burada ne konuşacağız? ;-)
Dan Ray

45
Tam nihayet tüm bu bellek yönetimi saçmalıklarını iyi bir şekilde hallettiğimde ve sonra bunu alakasız hale getiriyorlar. MESLEKLER!!!
Kongress

@Dan: Şaka yapmıyorsun, seçilerek kapatılabilir mi? Lütfen benim için önemli olan bir bağlantı verin! : D
sudo rm -rf

1
Derleyicinin artık NDA kapsamında olmadığına inanıyorum, bu nedenle bazı dosyaları (tipik olarak üçüncü taraf kaynak klasörleri) kodunuzdan seçici olarak hariç tutmak için, bunu her dosyaya derleyici seçeneği olarak ekleyin: -fno-objc-arc
blackjack75

2
@Yar: Evet öylesin. Keşke bu kadar basit olsaydı, ama ne yazık ki tüm kütüphaneler o kadar basit değil. Örneğin ele JSONKitalalım. Bunu ARC kontrolünden geçirmeyi deneyin. Ne demek istediğimi anlayacaksın. ;)
sudo rm -rf

170

ARC'nin tek tek dosyalarda nasıl kapatılacağını merak eden herkes için işte yaptığım şey:

  1. Proje ayarlarınıza gidin. Build Phases > Compile Sources
  2. ARC'nin devre dışı bırakılmasını istediğiniz dosyaları seçin ve -fno-objc-arc derleyici bayrakları ekleyin . Dosyaları seçip ardından "Enter" tuşuna basarak tek seferde birden fazla dosya için bayrak ayarlayabilirsiniz.

Önerilen yol bu mu bilmiyorum ama benim için işe yarıyor.

Not: Bu bilgiyi burada clang.llvm.org adresinden topladım, burada halka açık, dolayısıyla Gizlilik Sözleşmesi kapsamında değil.


1
Bu bayrağı bir kitaplıkla kullandığımda işe yarıyor, ancak lib .h dosyasını bir ARC sınıfına dahil ettiğimde Xcode sanki orada bayrak yokmuş gibi şikayet ediyor. Daha eski kitaplıkların bu bayrakla çalışmasını sağlayabildiniz mi?
casey

ASIHttpRequest ve SBJson'u çalıştırabiliyorum (Reachability.h'de struct kullanımı hakkında 1 uyarı alıyorum). Bayrağı tüm uygulama dosyalarına koydum.
pixelfreak

Tüm uygulama dosyaları mı yoksa sadece .h'ler mi? Projenin Derleme Kaynakları bölümünde sadece başlık dosyaları var, uygulama dosyaları yok. Bunları ekleyebilirim, ancak farklı bir etkiye sahip görünmüyor . Referans olarak, çalışmak için bir REST ayrıştırıcısı almaya çalışıyorum. ( github.com/mirek/NSMutableDictionary-REST.framework )
casey

1
Aha! Hatalara yeterince yakından bakmadım. İşaretsiz hatalardan farklı hatalardır. Otomatik yayın havuzunu koddan kaldırmak zorunda kaldım ve ne oldu!
casey

Birden fazla dosya seçip enter tuşuna bastığımda, burada önerildiği gibi, hepsi Derleme aşamalarında 'Derleme kaynaklarından' kaldırıldı. Onları ayrı ayrı seçmek zorunda kaldım. Yanlış bir şey yapıp yapmadığımdan emin değilim.
Gopalakrishnan Subramanian

10

iOS 5 hala bir Gizlilik Sözleşmesi kapsamındadır ve muhtemelen genel sürümü yayınlayana kadar devam edecektir. Bir geliştirici hesabınız varsa, Apple Geliştirici Forumları'na gidin ve oradan sorun.

Önceki sürümler için referansları saymanız ve buna göre saklamanız ve yayınlamanız gerekir. Check out Bellek Yönetimi kılavuzu .

Düzenleme: İşte Otomatik Referans Sayma için genel bir teknik özellik ve genel iOS 5 sayfasından bir alıntı :

Objective-C için Otomatik Referans Sayma (ARC), bellek yönetimini derleyicinin işi haline getirir. Yeni Apple LLVM derleyicisiyle ARC'yi etkinleştirerek, bir daha asla tutma veya bırakma yazmanıza gerek kalmayacak, bu da geliştirme sürecini önemli ölçüde basitleştirirken, çökmeleri ve bellek sızıntılarını azaltır. Derleyici, nesnelerinizi tam olarak anlar ve her nesneyi artık kullanılmadığı anda serbest bırakır, böylece uygulamalar öngörülebilir, sorunsuz performansla her zamankinden daha hızlı çalışır.


İOS 5 kullanılarak geliştirilen uygulamalar eski iPhone'larla çalışacak mı?
Geekgirl

Eski işletim sistemleri için geliştirmek üzere araçları kullanabileceksiniz, ancak ARC gibi yeni teknolojileri kullanamayacaksınız. Daha eski işletim sistemlerini hedeflemek istiyorsanız, manuel bellek yönetimi yapmanız gerekecektir. ARC'yi kullanmak istiyorsanız, kullanıcıları iOS 5 ile sınırlamanız gerekecek.
nevan king

1
ARC'ye yapılan bir referans, halka açık bir Apple sayfası geliştiricisindedir.apple.com /technologies/ios5, bu nedenle en azından bazı bölümleri Gizlilik Sözleşmesi kapsamında değildir.
cobbal

8
Aslında bu tam olarak doğru değil. ARC ile iOS 4 için derleyebilirsiniz. Apple mühendisinden alıntı: " iOS 4 ve Mac OS 10.6 için, derleyici uygulamanıza biraz çalışma zamanı uyumluluğu yapıştırıcı kodu ekler. Bu, uyumluluk kodunun sağlayabileceğinden daha fazla destek gerektiren __weak değişkenler dışında her şey için çalışır. İOS'ta ARC 4, ARC olmayan koddan daha basit, ancak iOS 5'teki ARC kadar basit değil. "Bu arada, WWDC zamanlama uygulaması ARC ile yazılmıştı ve iOS 4'te gayet iyi çalışıyordu!
sudo rm -rf

3
Evet; ancak bu, ARC konuşmasında yalnızca 4.3.x hedeflerinin 'uyumluluk tutkalı'nı alması nedeniyle nitelendirildi.
Alan Zeino

4

Ayrıntılar şu anda hafif / NDA kapsamındadır, ancak Apple, burada ayrıntılı olarak açıklandığı gibi iOS 5'te Otomatik Referans Sayımı (ARC) uygulamıştır: http://developer.apple.com/technologies/ios5/

İOS 5 SDK ile Xcode 4'te yeni bir uygulama geliştirirseniz, tutma / bırakma sayımını güvenle göz ardı edebilirsiniz.

[değiştir] sudo rm -rf iyi bir noktaya işaret ediyor; üçüncü şahıs kütüphaneleri önemli ölçüde etkilenebilir


İOS 5 kullanılarak geliştirilen uygulamalar eski iPhone'larla çalışacak mı?
Geekgirl

İOS 5 çalıştıran iPhone'larda çalışacak, yani yalnızca iPhone 3GS veya iPhone 4'te çalışacak. İOS 4'ü destekleyeceğine inanmıyorum, ancak yine derleme sırasında LLVM tarafından yapıldı, bu nedenle bir ikili dosya üretmek mümkün olabilir. iOS 4 ve 5. Bir iOS Geliştirici hesabı almanızı ve mevcut seçeneklerle uğraşmanızı şiddetle tavsiye ederim.
Dominic

Sudo'nun Nevan'ın cevabıyla ilgili yorumunda belirttiği gibi, gerçekten ARC ile iOS 4.0'a geri dönebilirsiniz, bu nedenle bu işletim sistemini çalıştırabilen eski cihazlar bununla uyumludur.
Brad Larson

3

SystemConfiguration.framework'dan hiç kimse bahsetmedi mi? Lütfen bunu Çerçevelere koymayı unutmayın . Bunu anlamak için birkaç saatimi acınası bir şekilde harcadım.


nedenini açıklamalısın.
John Riselvato

3

Kesinlikle geliştiricinin veya ekibin seçimidir. ARC (Otomatik Referans Sayacı), belleği sizin için otomatik olarak yöneterek işleri biraz daha kolaylaştırdı. Uygun olduğunda serbest bırakacak, tutacak ve kaldırılacaktır. Henüz yapmadıysanız, tercihen bir test uygulamasında hafızayı kendiniz yönetme konusunda deneyim kazanmanız gerektiğine inanıyorum. Dikkate alınması gereken bir diğer husus, uygulamanızın üçüncü taraf kitaplıklarına dayanıp dayanmadığıdır; bu, ARC'ye dönüştürülmezse uygulamanızın derlenmesini engelleyecektir. Seçim eldeki duruma bağlıdır.


0

proje ayarlarında> Derleme Aşamaları> Derleme Kaynakları bölümünde bayrağı -fno-objc-arc olarak ayarlayın

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.