Objective-C 中下列类属性的写法有何不同?
PHPz
PHPz 2017-04-21 11:16:48
0
4
407

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. 一般情况下应该如何写?

PHPz
PHPz

学习是最好的投资!

全員に返信(4)
迷茫

@private を使用して変数を宣言する特別な方法が考慮されていないと仮定すると、object-c では、変数と属性が宣言されている限り、この宣言を含む .m ファイルで使用できます。

すべてを公開することは、オブジェクト指向設計におけるカプセル化とは明らかに一致しません。これらの変数と属性は、情報を隠してカプセル化を保証するためのものです。 object-c ライブラリを作成しています。

それでは、すべての質問に対する答え:

    それらはすべてパブリックですが、.m ファイルは #imported できないため、間接的にプライベートを実装することになります
  1. 中括弧で囲まれたインスタンス変数は単なる数値であり、get/set メソッドにバインドすることはできず、インスタンスに続く単純なローカル変数と同等です。これは get/set メソッドの構文的なカプセル化 (いわゆる糖衣構文) であり、2 つのメソッド宣言を 1 つのプロパティ宣言に変換し、さまざまな属性に注釈を付けることで多くの基本タスクを完了するのに役立ちます。
  2. いくつかのライブラリが外部に公開される宣言を Foo.h に記述し、次に外部に公開されない宣言を Foo+Internal.h に記述するのを見たことがあります。この規則により、呼び出し元に使用しないように指示します。私の内部宣言。個人的には、このアプローチの方が好きです。
いいねを押す +0
Peter_Zhu

{}内に直接書かれたものはインスタンス変数、先頭に@propertyを付けて書かれたものはプロパティです。属性の場合、obj-c はインスタンス変数を自動的に生成し、(get/set メソッドまたは obj.attr を使用して) 属性にアクセスするときに、この自動生成されたインスタンス変数が使用され、その他の追加の処理が行われます。

いいねを押す +0
迷茫

@Huan Du がすでによく言ってくれました。私の使用習慣について話しましょう

1. ivar を使用する代わりに、クラス拡張で @property を宣言すると、内部で self.xxx を使用して値を取得/設定できるようになり、コードがより快適になります。

2. ヘッダー ファイルでは、外部から見えるメソッド/プロパティのみを宣言して、ヘッダー ファイルの内容をできるだけ小さく明確にします。外部的には読み取り専用だが内部的には読み取り/書き込み可能なプロパティがある場合、そのプロパティはクラス拡張で読み取り書き込みとして再宣言できます。

いいねを押す +0
小葫芦
  1. インスタンス、パブリック
  2. プロパティ(インスタンス、セッター、ゲッター自動生成)、パブリック
  3. 2と同じ
  4. インスタンス、パブリック

インスタンスの前に @private を追加できます

私の一般的なアプローチは、XCode によって自動的に生成されるコード形式でもありますが、public を @property として記述し、それを .h ファイルに置き、private を

として記述することです。 リーリー

それを .m ファイルに入れます。

空の括弧はカテゴリです。これを書かなくても、hiddenとして書いても問題ありません。つまり、他のクラスはこのプロパティを見ることができません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート