cari

Rumah  >  Soal Jawab  >  teks badan

Objective-C 中下列类属性的写法有何不同?

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

PHPzPHPz2769 hari yang lalu409

membalas semua(4)saya akan balas

  • 迷茫

    迷茫2017-04-21 11:18:48

    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.

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-21 11:18:48

    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.

    balas
    0
  • 迷茫

    迷茫2017-04-21 11:18:48

    @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.

    balas
    0
  • 高洛峰

    高洛峰2017-04-21 11:18:48

    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.

    balas
    0
  • Batalbalas