• IOS中的Propety(点语法,属性)


    main.m

      
        Person *p = [[Person alloc] init];
        
        
        [p setName:@"doubi"];
        [p setGender:@"man"];
        [p setAge:23];
        
        //点语法:
         //对象.属性名
        //凡是与系统默认setter和getter方法实现相似的方法都可以使用点语法来调用.
        //如果点语法在等号的左侧,代表调用的是setter方法
        //如果点语法在等号的右侧,代表调用的是戈塔特人方法
        NSLog(@"%@,%@,%ld",p.name, p.gender, p.age);

    Person.h

    @interface Person : NSObject
    //{
    //    NSString *_name;
    //    NSString *_gender;
    //    NSInteger _age;
    //}
    /*
     属性的作用:自动生成setter以及getter方法
     属性定义@property + 属性的类型(和内部操作的实例变量的类型一致)+属性名(和内部操作的实例变量名相同)
     
     属性在.h中自动生成setter和getter方法
     
     
    
     */
    
    
    @property NSString *name;
    
    //- (void)setName:(NSString *)name;
    //- (NSString *)name;
    
    @property NSString *gender;
    //- (void)setGender:(NSString *)gender;
    //- (NSString *)gender;
    @property NSInteger age;
    //- (void)setAge:(NSInteger)age;
    //- (NSInteger)age;
    
    
    @end

    Person.m

    @implementation Person
    /*
     当系统自动生成setter以及getter方法时,如果此时没有自己重写setter和getter方法,系统不但会帮你实现setter以及getter,而且会生成相应的实例变量,只不过实例变量是私有的,子类无法访问
    
     
     
     @synthesize 在.m中作用:
     (1)生成setter和getter方法的内部实现
     (2)生成setter和getter内部操作的实例变量
     
     
     //当自己实行了setter和getter方法,系统就不在帮我们生成实例变量,此时要自己定义实例变量或者使用@synthesize解决
     如果仅仅实现了setter或者getter中的一个,那么系统还会帮我们生成对应的实例变量
     
     当我写了@synthesize name = _name;这句话之后,setter和getter我即可以不写,也可以重写一个,更可以重写两个
     */
    
    
    @synthesize name = _name;
    @synthesize gender = _gender;
    @synthesize age = _age;
    
    //@property (nonatomic) )setName:(NSString *)name{
    //    if(_name != name){
    //        [_name release];
    //        _name = [name retain];
    //    }
    //}
    //
    //- (NSString *)name{
    //    return [[_name retain] autorelease];
    //}
    //当属性name的语义特性设置为copy 时的stter以及getter方法的内部实现
    //- (void)setName:(NSString *)name{
    //    if(_name != name){
    //        [_name release];
    //        _name = [name copy];
    //    }
    //}
    
    //- (NSString *)name{
    //    return [[_name retain] autorelease];
    //}
    //
    //- (void)setGender:(NSString *)gender{
    //    if (_gender != gender) {
    //        [_gender release];
    //        _gender = [gender retain];
    //    }
    //}
    //- (NSString *)gender{
    //    return [[_gender retain] autorelease];
    //}
    
    @end
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    /**
     *  读写特性:读-----getter,写------setter
     1.readonly:(只读)该属性只会生成getter方法,不会生成setter方法
     2.readwrite:(读写)该属性即会生成setter方法,也会生成getter方法,系统默认的特性
     3.setter = 方法名 ,指定在生成setter方法时,setter方法的方法名
     4.getter = 方法名,指定在生成getter方法时 ,getter的方法名
     */
    /**
     *  原子特性
     1.atomic (原子性):保证线程安全,系统默认特性
     2.nonotomic (非原子性):不保证线程安全,系统推荐.因为对于setter以及getter方法,可能会在一段时间内频繁的调用,如果每次都要开锁,加锁,这样会非常消耗系统支援降低程序的执行效率,因此,苹果从效果上考虑,推荐大家使用nonatomic
    
     */
    
    /**
     *  语义特性
     1.assign:主要针对基本数据类型, NSInterger CGFloat, BOOL,NSCOMparisonResult
     
     2.retain:只能针对与对象类型使对象的引用计数+1
     3.copy:只能针对,但是需要该类服从NSCopying协议,copy是将对象赋值出来一份,然后使赋值出来的对象的引用计数+1
     
     */
    
    
    
    //当属性name的语义特性设置为assign时的setter以及getter方法的内部实现.(直接赋值)
    //- (void)setName:(NSString *)name
    //{
    //    _name = name;
    //}
    //- (NSString *)name
    //{
    //    return _name;
    //}
    //当属性name的语义特性设置为return是的setter以及getter方法的内部事件.
    
    
    
    
    //- (void)setGender:(NSString *)gender
    //{
    //    _gender = gender;
    //}
    //- (NSString *)gender
    //{
    //    return _gender;
    //}
    //
    //- (void)setAge:(NSInteger)age
    //{
    //    _age = age;
    //}
    //- (NSInteger)age
    //{
    //    return _age;
    //}
    
    //- (id)initWithName:(NSString *)name gender:(NSString *)gender age:(NSInteger)age
    //{
    //    if (self = [super init]) {
    //        _name = name;
    //        _gender = gender;
    //        _age = age;
    //    }
    //    return self;
    //}
  • 相关阅读:
    中文转拼音 (utf8版,gbk转utf8也可用)
    会不会死循环
    图片放大缩小的zoom.js
    Getting unknown property: commonmodelsTeacher::auth_Key
    Yii-admin 权限菜单配置
    wordpress 后台富文本编辑器,添加图片发现无法左对齐,样式出现混乱
    windows 命令
    Yii2 获取URL的一些方法
    PHP 直接使用html输出excel
    json JSON_UNESCAPED_UNICODE 防止中文乱码
  • 原文地址:https://www.cnblogs.com/wohaoxue/p/4723616.html
Copyright © 2020-2023  润新知