1. 在 .h 文件中,例如:
@interface PullToRefreshView : UIView { UILabel *lastUpdatedLabel; UILabel *statusLabel; CALayer *arrowImage; UIActivityIndicatorView *activityView; }
2. 在 .h 文件中,例如:
@property (nonatomic, strong) UIScrollView *scrollView;
3. 在 .m 文件中,例如:
@interface PullToRefreshView @property (nonatomic, strong) NSArray *titles; @end
4. 在 .m 文件中,例如:
@implementation TopicListViewController { PullToRefreshView *pull }
简而言之,是否是
1. 在头文件中的是 public 属性,在 .m 中的是 private 属性?
2. 在 @interface 和 @implementation 中用大括号扩起来的和 @property 有何区别?(除了synthesize方面)
3. 一般情况下应该如何写?
@private を使用して変数を宣言する特別な方法が考慮されていないと仮定すると、object-c では、変数と属性が宣言されている限り、この宣言を含む .m ファイルで使用できます。
それらはすべてパブリックですが、.m ファイルは #imported できないため、間接的にプライベートを実装することになります-
中括弧で囲まれたインスタンス変数は単なる数値であり、get/set メソッドにバインドすることはできず、インスタンスに続く単純なローカル変数と同等です。これは get/set メソッドの構文的なカプセル化 (いわゆる糖衣構文) であり、2 つのメソッド宣言を 1 つのプロパティ宣言に変換し、さまざまな属性に注釈を付けることで多くの基本タスクを完了するのに役立ちます。 -
いくつかのライブラリが外部に公開される宣言を Foo.h に記述し、次に外部に公開されない宣言を Foo+Internal.h に記述するのを見たことがあります。この規則により、呼び出し元に使用しないように指示します。私の内部宣言。個人的には、このアプローチの方が好きです。 -
{}内に直接書かれたものはインスタンス変数、先頭に@propertyを付けて書かれたものはプロパティです。属性の場合、obj-c はインスタンス変数を自動的に生成し、(get/set メソッドまたは obj.attr を使用して) 属性にアクセスするときに、この自動生成されたインスタンス変数が使用され、その他の追加の処理が行われます。
@Huan Du がすでによく言ってくれました。私の使用習慣について話しましょう
1. ivar を使用する代わりに、クラス拡張で @property を宣言すると、内部で self.xxx を使用して値を取得/設定できるようになり、コードがより快適になります。
2. ヘッダー ファイルでは、外部から見えるメソッド/プロパティのみを宣言して、ヘッダー ファイルの内容をできるだけ小さく明確にします。外部的には読み取り専用だが内部的には読み取り/書き込み可能なプロパティがある場合、そのプロパティはクラス拡張で読み取り書き込みとして再宣言できます。
インスタンスの前に @private を追加できます
私の一般的なアプローチは、XCode によって自動的に生成されるコード形式でもありますが、public を @property として記述し、それを .h ファイルに置き、private を
として記述することです。 リーリーそれを .m ファイルに入れます。
空の括弧はカテゴリです。これを書かなくても、hiddenとして書いても問題ありません。つまり、他のクラスはこのプロパティを見ることができません。