美文网首页
IOS属性关键字笔记

IOS属性关键字笔记

作者: 我是何先生 | 来源:发表于2017-08-16 14:18 被阅读34次

关于IOS属性关键字的一些理解和笔记,对于weak,strong,assign,nonatomic,natomic等的一些思考,如有错误之处,请指正!

  • 原子性:natomic
    该属性为默认属性,在多线程操作下,一个实例变量在某一时刻,只有一个线程访问 。即变量的存取是互斥锁定的。(不一定线程安全)

  • 非原子性: nonatomic
    nonatomic特质的变量可以直接返回值,不受线程的影响,所以在执行效率上更快。

  • 读/写权限:readwrite(读写)、readonly (只读)
    从字面上就能理解readonly值具有get方法,readwrite具有get和set方法。

下面的内存管理语义才是重点!!

  • retain :
    使引用计数加1(MRC环境下,相当于ARC环境下的Strong,对MRC有畏惧感,不是很了解)
  • assign(基本数据类型默认关键字):
    直接赋值,适用于基本数据类型(bool,int,cgfloat等),不会使retainCoun加1,只是简单的赋值。(在MRC和ARC的环境下,都是使用默认assign修饰基本数据类型)
  • strong :
    每次对属性引用,retainCount都会加1,不用能与修饰基本数据类型,是NSObject和id的默认修饰符。
  • weak:
    不会使retainCount增加,只用于修饰NSObject,不能用于修饰基本数据类型。(delegate和控价都推荐使用weak,防止循环引用)在对象被销毁以后,指针指向nil。
  • copy:
    建立一个索引计数为1的对象,在赋值时使用传入值的一份拷贝。这里分为深拷贝和浅拷贝(block建议使用copy,block建立的时候是放在栈上的,调用完毕以后就会被销毁,使用copy将其放在堆上,只有在对象销毁的时候才会销毁)
    深拷贝:浅拷贝类似retain,引用计数对象+1.创建一个指针。也就是说,不仅改变值,还改变指正指向的内存地址;
    浅拷贝:只改变指针指向的地址。即只拷贝了原对象的指针。

weak和assign的区别

weak 和 assign 最大的区别在于,weak修饰的属性指向的对象被销毁后自动指向nil,再向weak修饰的属性发消息的时候,不会造成野指针,防止carh。并且weak只能修饰对象,assign修饰基本数据类型。

相关文章

  • iOS属性关键字

    iOS属性关键字 引言 学习 iOS 开发的人,大多都绕不开属性关键字—— assign,weak,unsafe_...

  • IOS属性关键字笔记

    关于IOS属性关键字的一些理解和笔记,对于weak,strong,assign,nonatomic,natomic...

  • iOS开发---属性关键字详解

    iOS开发—属性关键字详解 @Property 什么是属性? 属性(property)是Objective-C的一...

  • iOS objective-c 属性关键字

    首先iOS objective - C有以下属性关键字strongweakassignatomicnonatomi...

  • iOS - 基础

    iOS 属性修饰关键字都有哪些? atomic 原子性访问,对属性赋值的时候加锁 noatomic 非原子...

  • IOS学习(10)-UIImageView

    iOS开发笔记--UIImageView的属性之animationImages详解 IOS-UIImageView...

  • ios9新特性(关键字)

    嗯嗯,马上就要 发布iOS新的版本了。嗯,码农又该忙碌了 ios9新特性(关键字) 新出的关键字:修饰属性,方法的...

  • iOS 中weak的实现

    只要学过 iOS 的人,都会对 strong、weak、copy等关键字应该都会很熟悉。weak 属性关键字就是弱...

  • IOS 常用关键字基础大全

    ios声明属性时,在ARC环境下常用到的关键字,readonly、readwrite、nonatomic、...

  • iOS中的修饰关键字

    1. iOS中定义属性、变量的修饰关键字 在声明@property 属性、变量时,总是要在括号中写上assign、...

网友评论

      本文标题:IOS属性关键字笔记

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