Biraz farklı bir açıdan baktığımızda, dünyanın gerçekten myClassB
'un MyClassA
bir özelliği olduğunu bilmesini isteyip istemediğinize karar vermeniz gerekiyor. Örneğin, MyClassA
aracılığıyla edinebileceğiniz myString
numaralı reklamı yalnızca reklam vermek isteyebilirsiniz. Bu, diğer sınıfların myString
'un temel uygulamasını bilmesini sağlar. MyClassB
'u göstermeniz gerekmedikçe, onu "dünyanın geri kalanından" gizlemelisiniz. aşağıdaki gibi MyClassA.h değiştirecek Bu durumda
: MyClassA.m yılında
//
// MyClassA.h
//
@interface MyClassA : NSObject
@property (strong, nonatomic, readonly) NSString *myString;
@end
, aşağıdakileri yapmanız olacaktır.
//
// MyClassA.m
//
#import "MyClassA.h"
#import "MyClassB.h"
@interface MyClassA()
@property (strong, nonatomic) MyClassB *myClassB;;
@end
@implementation MyClassA
// Other meaningful code omitted
- (NSString *)myString {
return self.myClassB.myString;
}
@end
ne ben burada yaptığım içten myClassB
için özellik tanımlamak için anonim bir kategori kullanmak olduğunu unutmayın. Buradaki önemli nokta, MyClassB
'un diğerlerine gösterilmemesinin mantıklı olup olmadığıdır. Bu yaklaşımın ana avantajı, kodunuzun daha kolay uygulanabilir olmasıdır. myString
'un farklı bir yoldan türetildiğini varsayalım. Tamamen farklı bir sınıftan veya farklı bir yöntemden. myString
'u tüketmesi gereken kod aşılanır.
MyClassB
'u açığa çıkarmanız gerekiyorsa, o zaman Tyler'ın yukardan ya da #import MyClassB.h
MyClassA.h adresinde önerildiği gibi @class
'u kullanabilirsiniz. En iyi uygulamalar, @class
bildirimini ileri sürerek reçete eder. Ancak zaman zaman uygulama dosyasında çok sayıda dosyayı içe aktarmak zorunda kalmamanın rahatlığı kazanabilir. Kod tabanınız, bu yüzden hangisinin sizin için en uygun olduğunu seçebilirsiniz. Genelde ikisinin bir kombinasyonunu kullanırım.