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

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

学习是最好的投资!

membalas semua(4)
迷茫

Dengan mengandaikan bahawa cara khas menggunakan @private untuk mengisytiharkan pembolehubah tidak dipertimbangkan, dalam objek-c, selagi pembolehubah dan atribut yang diisytiharkan boleh digunakan dalam fail .m yang mengandungi perisytiharan ini.

Sudah tentu, membuat semua perkara awam tidak selaras dengan pengkapsulan dalam reka bentuk berorientasikan objek Pembolehubah dan atribut yang ditulis secara langsung dalam .m adalah untuk menyembunyikan maklumat dan memastikan pengkapsulan nama rasmi kaedah ini ialah Category dianggap kaedah yang diperlukan untuk menulis object-c lib.

Jadi, jawapan kepada semua soalan:

  1. semuanya awam, tetapi fail .m tidak boleh #diimport, dan peribadi
  2. dilaksanakan secara tidak langsung.
  3. Apa yang dilampirkan dalam kurungan kerinting ialah pembolehubah contoh, yang merupakan nilai berangka mudah Ia tidak boleh terikat pada kaedah get/set, dan tidak boleh mengekalkan/menyalin/atom secara automatik yang mengikuti contoh; Harta ialah enkapsulasi sintaks (yang dipanggil gula sintaksis) kaedah dapatkan/set, menukar dua pengisytiharan kaedah menjadi satu pengisytiharan sifat dan membantu anda menyelesaikan banyak tugas asas dengan menganotasi pelbagai atribut.
  4. Saya telah melihat beberapa lib menulis pengisytiharan yang terdedah kepada luar dalam Foo.h, dan kemudian menulis pengisytiharan yang tidak terdedah kepada luar dalam Foo+Internal.h Melalui konvensyen ini, pemanggil diberitahu tidak untuk menggunakan saya Pembolehubah dalaman, sifat dan kaedah. Secara peribadi, saya lebih suka pendekatan ini.
Peter_Zhu

Apa yang ditulis terus di dalam {} ialah pembolehubah contoh , dan apa yang ditulis dengan @property di hadapan ialah atribut . Untuk atribut, obj-c akan menjana pembolehubah tika secara automatik dan kemudian apabila mengakses atribut (menggunakan kaedah get/set atau menggunakan obj.attr), pembolehubah tika yang dijana secara automatik ini akan digunakan dan melakukan beberapa perkara tambahan lain.

迷茫

@Huan Du sudah mengatakannya dengan baik, mari bercakap tentang tabiat penggunaan saya

1. Daripada menggunakan ivar, isytiharkan @property dalam Sambungan Kelas, supaya anda boleh menggunakan self.xxx secara dalaman untuk mendapatkan/menetapkan nilai dan kod akan kelihatan lebih selesa.

2. Dalam fail pengepala, hanya isytiharkan kaedah/sifat yang boleh dilihat oleh dunia luar, supaya kandungan fail pengepala adalah sekecil dan sejelas mungkin. Jika terdapat sifat baca-sahaja secara luaran tetapi boleh baca-tulis secara dalaman, harta itu boleh diisytiharkan semula sebagai tulis baca dalam Sambungan Kelas.

小葫芦
  1. contoh, awam
  2. harta benda (contoh, setter, getter dijana secara automatik), awam
  3. Sama seperti 2
  4. contoh, awam

Anda boleh menggunakan @private di hadapan instance

Pendekatan umum saya, yang juga merupakan format kod yang dijana secara automatik oleh XCode, ialah menulis awam sebagai @property dan meletakkannya dalam fail .h, dan peribadi sebagai

@interface Foo ()

@property Bar bar;

@end

Letakkannya dalam fail .m.

Kurungan kosong adalah kategori Anda boleh membiarkannya kosong atau menulisnya sebagai tersembunyi Secara ringkasnya, kelas lain tidak akan dapat melihat sifat ini.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan