SORU
13 HAZİRAN 2011, PAZARTESİ


Semantik Sayı: Mülk'In sentezlenmiş alıcı 'sahibi' nesneleri döndürmek için Kakao adlandırma kuralı aşağıdaki gibidir

Şu anda iOS 5 SDK benim app geliştirmek için çalışıyoruz kullanıyorum. Bir NSString bir özellik yapmak için, ve sonra sentezlemek için çalışıyorum .m dosyası (hiçbir sorunları ile bunu daha önce de yaptım). Şimdi, bu noktaya geldim: "Anlam Sorunu: Tesisin sentezlenmiş alıcı dönen '' nesneler." sahip olduğu için Kakao adlandırma kuralı aşağıdaki gibidir

Bu benim kod: .h

@interface ViewController : UIViewController {
     NSString *newTitle;
}
@property (strong, nonatomic) NSString *newTitle;

.m

@synthesize newTitle;

Herkes bunu halledebilirim bir fikri olan var mı? Teşekkürler!!

CEVAP
13 HAZİRAN 2011, PAZARTESİ


Benim tahminim kullandığınız derleyici sürümü ilan özellikleri set: . için bildirilen özellikleri the memory management rules de — özellikle izler,

Sana başlayan bir yöntemi kullanarak oluşturun eğer bir nesnenin sahipliğini“”,“”, “” veya“”. mutableCopy kopyasını yeni tahsis

Bir özelliği sentezlenmiş newTitle,, adlı bir yöntem -newTitle, Bu yüzden uyarı/hata denilen verir. -newTitle olması gerekiyor alıcı yöntemi newTitle özellik, ancak adlandırma kuralları devlet bir yöntem olan adı ile başlıyor new bir nesne döndürür bu köpeği arayan, hangi durumda getter metotları.

Bunu çözmek için:

  1. Bu özelliği yeniden adlandırma:

    @property (strong, nonatomic) NSString *theNewTitle;
    
  2. Özellik adı tutmak ve özel bir yöntem ile başlamayan alıcı adı belirterek önekleri adı:

    @property (strong, nonatomic, getter=theNewTitle) NSString *newTitle;
    
  3. Tutma özelliği adı ve alıcı adı ve söyleyen derleyici bile olsa alıcı adı ile başlar new aittir none yöntem aile karşıt olarak new yöntem aile:

    #ifndef __has_attribute
    #define __has_attribute(x) 0  // Compatibility with non-clang compilers
    #endif
    
    #if __has_attribute(objc_method_family)
    #define BV_OBJC_METHOD_FAMILY_NONE __attribute__((objc_method_family(none)))
    #else
    #define BV_OBJC_METHOD_FAMILY_NONE
    #endif
    
    @interface ViewController : UIViewController
    @property (strong, nonatomic) NSString *newTitle;
    - (NSString *)newTitle BV_OBJC_METHOD_FAMILY_NONE;
    @end
    

    Not o halde bu çözüm sağlar sana devam et newTitle Her iki özellik adı ve alıcı adı, sahip bir yöntem olarak adlandırılan -newTitle gelmez geri bir nesne tarafından sahip olunan arayan olabilir kafa karıştırıcı için diğer insanların okuma kodu.


Kayıt için Apple olan devlet Transitioning to ARC Release Notes, yayınladı:

Özelliği new copy ile başlayan bir isim veremezsiniz.

Zaten onların ifadesi çok doğru olmadığını haberdar oldum: suçlu alıcı yöntem adı, özellik adı değil.


17 Ocak 2015 Düzenleme:Ben sadece fark bir recent commit to Clang düşündürmektedir seçenek 3 yukarıda (kullanarak objc_method_family(none)), dahil olmak üzere, bir tamirci, genel durumunda bir özellik adıyla bir özel yöntem aile önekler. Böyle büyük mükafat büyük olasılıkla bu değişiklik eninde sonunda gelecektir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Christopher Bill

    Christopher

    30 NİSAN 2009
  • MarinaHD2001

    MarinaHD2001

    7 ŞUBAT 2009
  • Tahir Jahi

    Tahir Jahi

    6 Mart 2006