SORU
27 Kasım 2008, PERŞEMBE


@sınıf vs alma

Bir ClassB ClassA bir başlık bulunması gereken olay ileri-sınıf bildirimi kullanması gereken benim anlayış ve ClassB herhangi bir dairesel kusurları önlemek için ClassA bir başlık eklemek gerekiyor. Ben de #import Bir tek olunca da vardır ki ifndef basit olduğunu anlamak.

Talebim şudur: ne Zaman bir #import kullanıyor ve ne zaman bir @class kullanıyor mu? Eğer @class beyan kullanırsam bazen, aşağıdaki gibi ortak derleyici bir uyarı görüyorum

warning: receiver 'FooController' is a forward class and corresponding @interface may not exist.

Gerçekten bunu anlamak için aşk, karşı sadece ileri-beyanname @class kaldırma ve uyarıları susturmak için #import Bir atma olur derleyici veriyor bana.

CEVAP
27 Kasım 2008, PERŞEMBE


Eğer bu uyarıyı görürseniz:

uyarı: alıcının MyCoolClass' ileri bir sınıftır ve @karşılık gelen arabirim olmayabilir

#import dosyasına ihtiyacınız var, ama uygulama dosyasında bu yapmak önemlidir.m) ve @class bildirimi kullanmak üstbilgi dosyası.

@class (genellikle) #import dosyaları, sadece gereksinimi daha bilgi yararlı olduğu kadar iniyor kaldırmaz.

Örneğin

Eğer @class MyCoolClass, derleyici görebilirsiniz biliyor diyorsan bir şey gibi:

MyCoolClass *myObject;

MyCoolClass geçerli bir sınıf daha başka bir şey hakkında endişelenmenize gerek yok ve bir işaretçi (gerçekten, sadece bir işaretçi) için yer ayırmalısınız. Böylece, başlığında, @class yeterli zaman .

Hiç ya myObjectoluşturmak ve erişmek için gereken'nın üyeleri, derleyici bu yöntemleri ne bildirmek gerekir. ancak, Bu noktada (muhtemelen uygulama dosyası), #import "MyCoolClass.h", derleyici sadece ötesinde ek bilgi söylemek gerekir "bu bir sınıftır".

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FOSDEM

    FOSDEM

    13 Ocak 2009
  • L33TNoonProductions

    L33TNoonProd

    24 EYLÜL 2010
  • TitaniumBackup

    TitaniumBack

    10 EYLÜL 2011