-All_load bağlayıcı işareti ne işe yarar?


123

Objective-C kodunu derlerken -all_load bayrağının ne yaptığını hiçbir yerde bulamıyorum.

İkili dosyaları Apple'a yüklerken bazı sorunlar yaşıyorum, çünkü bu bayrağı kullanmadığım için söylüyorlar, ancak kodum onsuz bile derleniyor.

Biri bana yardım edebilir mi?

Teşekkürler


2
Genellikle, bununla ilgili gördüğünüz tüm hatalar, uygulamayı çalıştırırken cihazda meydana gelir. Apple tarafından incelenmek üzere gönderilmeden önce uygulamanızı gerçek donanım üzerinde test etmediğini mi söylüyorsunuz? Eğer öyleyse, bu çok çok kötü bir fikir.
Brad Larson

Bunu test ettim, ancak "dağıtım" yapılandırmamda (uygulama mağazası ön hazırlık profiline sahip olan) bayrak yoktu ve tüm testler bayrağı olan geliştirme profili kullanılarak yapıldı, bu nedenle her şey yolunda görünüyor ve ne zaman Bunu dağıtım profili ile uygulama mağazası için derledim, bayrak kapalıydı ve dağıtım profili yerel olarak yüklenemediği için kontrol edemedim.
Guy Ephraim

Yanıtlar:


144

Muhtemelen bu teknik notla ilgilidir https://developer.apple.com/library/content/qa/qa1490/_index.html

ÖNEMLİ: 64 bit ve iPhone işletim sistemi uygulamaları için, -ObjC'nin yalnızca kategoriler içeren ve sınıf içermeyen statik kitaplıklardan nesne dosyalarını yüklemesini önleyen bir bağlayıcı hatası vardır. Çözüm, -all_load veya -force_load bayraklarını kullanmaktır. -all_load, bağlayıcıyı, Objective-C kodu olmayanlar da dahil, gördüğü her arşivden tüm nesne dosyalarını yüklemeye zorlar. -force_load, Xcode 3.2 ve sonrasında mevcuttur. Arşiv yüklemesinde daha ince tahıl kontrolüne izin verir. Her -force_load seçeneğinin ardından arşive giden bir yol gelmelidir ve bu arşivdeki her nesne dosyası yüklenecektir.


3
Evet, bu öncelikle iPhone için statik kitaplıklarla devreye giriyor. Bu bağlayıcı işareti olmadan derlenirlerse, kategoriler yerleşik ikiliye dahil edilmez ve bu statik kitaplıkları kullanan herhangi bir uygulamada iPhone OS donanımında çalıştırıldığında çalışma zamanı hataları olur.
Brad Larson

1
derleme sırasında eksik yöntemin bazı uyarıları veya hataları olmamalı mı?
Guy Ephraim

18
Hayır, kategoriler derleme zamanında var oldukları için, sadece son ikiliye bağlanmıyorlar. Ancak, Obj-C gönderimlerinin dinamik doğası nedeniyle bağlayıcı, kodu doğrudan uygulama yöntemine çağırmaz, bu nedenle eksik olduğunu asla fark etmez. Daha sonra çalışma zamanında, "-performSelector:" kullanarak çağırdığınız gibi kaboom elde edersiniz
Sophistifunk

14
Teknik notu açıklığa kavuşturmak istiyorum: Çoğu zaman -all_load değil -ObjC bağlayıcı bayrağını isteyeceksiniz. -all_load, sınıfları olmayan, sadece kategorileri olan bir kitaplığınızın olduğu (nadir varsayılırım) örnekte önerilir.
Chris Hill

3
Stackoverflow.com/a/2615407/62'ye göre bu, XCode 4.2'den itibaren düzeltilmiştir, bu nedenle artık -all_load veya -force_load bayraklarına ihtiyacınız yoktur. Hala -ObjC'ye ihtiyacınız var.
Liron Yahdav
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.