2012-03-29 6 views
0

これはNewsstandKit.frameworkに厳密に関連していないが、このアプローチの実際の例がそこにあります:NKLibraryコンストラクタをインターフェイスに公開せずにFooクラスの新しいインスタンスを作成するにはどうすればよいですか?

addIssueWithName:date:インスタンスメソッドは、ニューススタンドの問題作成 - NKIssueを - と、コンテンツライブラリへと非の場合には、それを追加します-failureはそれを返します。この時点でNKIssueのインスタンスはnameで、dateのプロパティは最初にaddIssueWithName:date:に渡された値に設定されています。

あなたがそれをチェックアウトする場合は、NKIssueクラスが(NSObjectから継承平野init以外の)特定の初期化メソッドを持っていないにも@publicインスタンス変数(例えば_name_date)とそのプロパティは、すべてreadonlyです。

私はこの全体が内部的にどのように機能するのか理解できません。私はこのアプローチを私の図書館の1つで模倣したいと思っていますが、どのように実際にどのように考え出すことができません...

ありがとう。

答えて

0

アップルのコードはアップルのコードにアクセスしています。 readonlyのプロパティーNKIssueは、クラス拡張でreadwriteと再宣言されている可能性があります。 TOCPLの"Property Redeclaration"をご覧ください。 readonly除いてまったく同じ属性(これが必要になる)と

@interface Carborundum : NSObject 
@property (readonly, copy, nonatomic) NSString * whiskers; 
@property (readonly, retain, nonatomic) NSDate * inception; 
@end 

実装ファイル(または他のプライベートファイル)で同じプロパティを持つクラスの拡張機能があります:ヘッダで

、あなたが見ます。

@interface Carborundum() 
@property (copy, nonatomic) NSString * whiskers; 
@property (retain, nonatomic) NSDate * inception; 
@end 

彼らはいつものように合成している:

@implementation Carborundum 

@synthesize whiskers; 
@synthesize inception; 

@end 

これは、あなたのコードながら、読み書きなどのプロパティを使用するクラスの拡張機能(すなわち、他のUIKitコード)を見ることができるコードすることができますヘッダーにしかアクセスできないが、読み取り専用バージョンに制限されています。これは、実行時ではなくコンパイラによって強制されます。

このに入るSOの質問のかなりの数があります:https://stackoverflow.com/search?q=%5Bobjc%5D+redeclare+property

+0

どのような実装では、これらくださいsynthesize' '@だろうか? – Ali

関連する問題