美文网首页
@property 相关基础

@property 相关基础

作者: 骑行怪状 | 来源:发表于2016-04-12 10:17 被阅读29次

property 相关知识

@property (nonatomic, readwrite, copy) NSString *name;

@property 是以 @ 开头,所以它也是 Objective—C 编译器指令,用于声明属性,并为它自动创建一个带下划线的实例变量,及实例变量的 setter 和 getter 方法。

原子性

atomic(默认):atomic意为操作是原子的,意味着只有一个线程访问实例变量。atomic是线程安全的,至少在当前的存取器上是安全的。它是一个默认的特性,但是很少使用,因为比较影响效率,这跟ARM平台和内部锁机制有关。
nonatomic:nonatomic跟atomic刚好相反。表示非原子的,可以被多个线程访问。它的效率比atomic快。但不能保证在多线程环境下的安全性,在单线程和明确只有一个线程访问的情况下广泛使用。

存取器控制

readwrite(默认):readwrite是默认值,表示该属性同时拥有setter和getter。
readonly: readonly表示只有getter没有setter。

有时候为了语意更明确可能需要自定义访问器的名字:

@property (nonatomic, setter = mySetter:,getter = myGetter ) NSString *name;

最常见的是BOOL类型,比如标识View是否隐藏的属性hidden。可以这样声明:

@property (nonatomic,getter = isHidden ) BOOL hidden;

内存管理

assign(默认):assign用于值类型,如int、float、double和NSInteger,CGFloat等表示单纯的复制。还包括不存在所有权关系的对象,比如常见的delegate。

retain:在setter方法中,需要对传入的对象进行引用计数加1的操作。
简单来说,就是对传入的对象拥有所有权,只要对该对象拥有所有权,该对象就不会被释放。如下代码所示:

- (void)setName:(NSString*)_name{  
     //首先判断是否与旧对象一致,如果不一致进行赋值。  
     //因为如果是一个对象的话,进行if内的代码会造成一个极端的情况:当此name的retain为1时,使此次的set操作让实例name提前释放,而达不到赋值目的。  
     if ( name != _name){  
          [name release];  
          name = [_name retain];  
     }  
}

strong:strong是在IOS引入ARC的时候引入的关键字,是retain的一个可选的替代。表示实例变量对传入的对象要有所有权关系,即强引用。strong跟retain的意思相同并产生相同的代码,但是语意上更好更能体现对象的关系。
weak:在setter方法中,需要对传入的对象不进行引用计数加1的操作。简单来说,就是对传入的对象没有所有权,当该对象引用计数为0时,即该对象被释放后,用weak声明的实例变量指向nil,即实例变量的值为0。

注:weak关键字是IOS5引入的,IOS5之前是不能使用该关键字的。delegate 和 Outlet 一般用weak来声明。

copy:与strong类似,但区别在于实例变量是对传入对象的副本拥有所有权,而非对象本身。

相关文章

  • @property 相关基础

    property 相关知识 @property 是以 @ 开头,所以它也是 Objective—C 编译器指令,...

  • 面试题

    @property相关 @property的本质是什么? @property = ivar + getter + ...

  • OC 之 Property

    property 的本质: @property = ivar + getter + setter; 原子性相关 a...

  • iOS大厂面试最常见问题汇总

    基础相关 什么是ARC? block一般用那个关键字修饰,为什么? 用@property声明的NSString(或...

  • @property相关属性

    @property 1.Assign 简单赋值,不更改引用计数 (例如NSInteger,CGFloat)和C数据...

  • OC--@property相关

    @property相关 一、@property的本质是什么?ivar、getter、setter 是如何生成并添加...

  • 90% 的 Python 开发者不知道的描述符应用

    如何实现property 先来说说property吧。 有了第一篇的基础,我们知道了 property 的基本用法...

  • Runtime-- API调用

    将API做了下分类便于查找。Class相关 Object_ Ivar相关 property相关 method、IM...

  • iOS-认识@property

    前言 关于@property基础的一次总结学习 属性与实例变量 当我们写下@property NSObject *...

  • python基础 -- property

    1. 作用 把函数变成属性,同时可以对属性进行检查 2. 操作

网友评论

      本文标题:@property 相关基础

      本文链接:https://www.haomeiwen.com/subject/amailttx.html