cari

Rumah  >  Soal Jawab  >  teks badan

objective-c - OC 直接使用@property就能定义属性了吗?

#import <Foundation/Foundation.h>

@interface Person : NSObject


@property  NSString * name;


@end

这样就直接能使用p.name了。
好像不需要如下定义:

#import <Foundation/Foundation.h>

@interface Person : NSObject{
NSString* _name;

}


@property  NSString * name;


@end

这两种方式有啥区别呢?

ringa_leeringa_lee2804 hari yang lalu471

membalas semua(2)saya akan balas

  • 天蓬老师

    天蓬老师2017-04-24 09:16:09

    Dari pengalaman saya, adalah disyorkan untuk menggunakan sifat untuk mentakrifkan semua nama, supaya kaedah operasi memori boleh ubah dapat dibezakan dengan jelas (pelbagai benang terlalu jarang dan boleh diabaikan). Dan, bagi saya, ini adalah salah satu cara yang lebih mudah untuk mengenal pasti pembolehubah global Menggunakan _name terus dalam fail m boleh memahami dengan cepat bahawa ini adalah pembolehubah global. Saya fikir ia adalah tabiat yang sangat baik untuk menggunakan sifat sebagai pembolehubah global. Selain itu, sintesis yang disebut oleh @freewolf di sini sebenarnya boleh ditinggalkan. Berikut adalah penetap mudah sebagai contoh.

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    @property (nonatomic,retain) NSString * name;
    
    @end
    
    #import "Person.h"
    
    @implementation Person
    //下一步可以省略
    @synthesize name = _name;
    
    -(void) setName:(NSString *)name
    {
        name = _name;
    }
    
    @end

    balas
    0
  • PHP中文网

    PHP中文网2017-04-24 09:16:09

    
    @property  NSString * name;
    // 这个等于下面的(编译器会自动帮你处理)
    
    
    //.h文件
    {
        NSString *_name;
    }
    // (线程处理方式, 内存操作方式)
    @property(atomic, copy)  NSString * name;
    
    // .m文件
    // 属性名对应的成员变量是
    @synthesize _name = name;
    

    balas
    0
  • Batalbalas