zoukankan      html  css  js  c++  java
  • OC中的@property和@synthesize

    学习链接:https://www.jianshu.com/p/2654198f4d08 

       OC中提供两个关键字@property和@synthesize,用于提供setter和getter方法,使得代码更加简洁,在这不多做介绍,看完会用就行。 

      一般@property在.h文件中使用,@synthesize在.m文件中使用

    • 以实例属性 _name 为例:
          属性声明:@property NSString *name;
      相当于在 @interface 中声明两个方法:
          setter方法:- (void)setName:(NSString *)name;
          getter方法:- (NSString *)name;

    • 属性的实现:在 .m 文件中使用 @synthesize 实现属性
         以实例变量 _name 为例:
         属性实现:@sybthesize name = _name;
         相当于在 @implementation 中实现两个方法

      原理其实就是系统会自动生成一个_属性名的变量,就比如
    -(void)setName:(NSString *)name { 
          _name = name;      }
    -(NSString *)name {       
             return _name;      }

      值得注意的是_属性名这个变量是私有的,如果重写了setter和getter变不再会自动生成了

      下面还有一些控制属性的特性:

    • 读写性 
      读写性的控制(readonly、readwrite、setter=、getter=)
        readonly:只读状态,是告诉编译器,属性值生成 getter 方法,不生成 setter 方法。
        readwrite:读写状态,是告诉编译器,属性值生成 getter 方法,又生成 setter 方法,既有设置器,也有访问器,默认的读写特性。
        setter=:指定属性生成的setter方法的名字。
        getter=:指定属性生成的getter方法的名字。

    • 原子性
      原子性控制(atomic、nonatomic)
      控制属性在多线程进行访问的安全问题。
        atomic:原子特性,是线程安全的访问,setter、getter 方法在多线程访问下是绝对安全的。每次只允许一个线程访问属性,默认是atomic,属性比较常用,atomic会不停对属性做加锁解锁操作,消耗资源,降低系统性能。
        nonatomic:非原子性控制,setter、getter方法内部不做线程安全控制,仅仅是普通的setter、getter方法,一般情况下使用nonatomic。

    • 语意特性
       
    语义设置(assign、retain、copy)
     assign:一些基本数据类型(非对象类型,比如int、float等)的属性使用assign,使用assign,setter,getter方法直接赋值。
        
    @property (nonatomic, assign) NSInteger age;

    retain:一般对象作为属性(比如NSString等)的时候,并且要保留这个对象的时候,已修改全修改,跟strong差不多。
    @property (nonatomic, retain) NSString *name;

    -(void)setName:(NSString *)name {
          if (_name != name) {
              [_name release];
              _name = [name retain];
          }
      }
    
      - (NSString *)name {
          return  [[_name retain] autorelease];
      }

    copy:一般对象需要拷贝一个对象副本的时候使用,拷贝了一份新的,原来的修改,新的不会修改。
    @property (nonatomic, copy) NSString *gender;

    -(void)setGender:(NSString *)gender {
        if (_gender != gender) {
            [_gender release];
            _gender = [gender copy];
        }
    }
    
    -(NSString *)gender {
        return  [[_gender retain] autorelease];
    }
  • 相关阅读:
    Flink-v1.12官方网站翻译-P029-User-Defined Functions
    Flink-v1.12官方网站翻译-P028-Custom Serialization for Managed State
    Flink-v1.12官方网站翻译-P027-State Schema Evolution
    Flink-v1.12官方网站翻译-P026-State Backends
    Flink-v1.12官方网站翻译-P025-Queryable State Beta
    Flink-v1.12官方网站翻译-P024-Checkpointing
    Flink-v1.12官方网站翻译-P023-The Broadcast State Pattern
    Flink-v1.12官方网站翻译-P022-Working with State
    java笔记五——数组
    java笔记四——java基础知识(二)
  • 原文地址:https://www.cnblogs.com/caijiaming/p/13808992.html
Copyright © 2011-2022 走看看