美文网首页
iOS之属性关键字

iOS之属性关键字

作者: 賣女孩的小火柴 | 来源:发表于2020-12-01 14:18 被阅读0次

属性关键字可以分为三种类型:

        1.读写权限的类型: readonly ,readwrite

        2.原子类 : atomic ,nonatomic

        3.引用计数 : retain/strong/copy,assign/unsafe_unretained,weak

读写权限的类型: readonly ,readwrite

        readwrite 是可读可写特性;会自动生成getter方法和setter方法

        readonly 是只读特性 只会生成getter方法 ,不会生成setter方法    

原子类: atomic nonatomic

        atomic是保证赋值和获取是线程安全的。 这里说的是对成员属性的直接赋值和获取,并代表操作和访问。 对于atomic的属性,系统生成的 getter/setter 会保证 get、set 操作的完整性,不受其他线程影响。atomic对一个数组,进行赋值或获取,是可以保证线程安全的。但是如果数组进行操作,比如给数据加对象或移除对象,是不在atomic的保证范围。

引用计数

        retain/strong:修饰objc数据类型,其引用计数+1,修饰的对象被释放后,引用计数-1

        assign:修饰基本数据类型,修饰对象类型时,不改变其引用计数,会产生悬垂指针,修饰的对象在被释放后,assign指针仍然指向原对象内存地址,如果使用assign指针继续访问原对象的话,就可能会导致内存泄漏或程序异常

        weak:不改变被修饰对象的引用计数,所指对象在被释放后,weak指针会自动置为nil

        copy:分为深拷贝和浅拷贝

            浅拷贝:对内存地址的复制,让目标对象指针和原对象指向同一片内存空间会增加引用计数

            深拷贝:对对象内容的复制,开辟新的内存空间

注:可变对象的copy和mutableCopy都是深拷贝;不可变对象的copy是浅拷贝,mutableCopy是深拷贝;copy方法返回的都是不可变对象。

下面我们来说一说面试会被问到的知识点:

Q:@property (nonatomic, copy) NSMutableArray * array;这样写有什么影响?

A:copy方法返回的都是不可变对象,所以array对象实际上是不可变的,如果对其进行可变操作如添加移除对象,则会造成程序crash

Q:strong和weak的区别?

A:strong 表示指向并拥有该对象。其修饰的对象引用计数会加1.该对象只要引用计数不为0则不会被销毁。当然强制将其置为nil也可以销毁它。 weak 表示指向但不拥有该对象。其修饰的对象引用计数不会增加。无需手动设置,该对象会自行在内存中销毁。

Q:assign 和weak的区别?

A:1、assign可以修饰对象和基本数据类型, weak只修饰对象

    2、assign 所修饰的对象被释放后,还会指向原对象内存地址。weak 所修饰的对象被废弃之后,weak 所修饰对象会被设置为nil。

Q:浅拷贝和深拷贝的区别?

A:浅拷贝增加引用计数,不产生新的内存。 深拷贝不增加引用结束,会新分配内存

相关文章

  • iOS属性关键字

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

  • iOS9新特性之关键字

    iOS9新特性之关键字 iOS9新出的关键字:用来修饰属性,或者方法的参数,方法的返回值 好处:1.迎合swift...

  • iOS9新特性

    01-iOS9新特性之关键字 iOS9新出的关键字:用来修饰属性,或者方法的参数,方法的返回值 好处:1.迎合sw...

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

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

  • iOS之属性关键字

    属性关键字可以分为三种类型: 1.读写权限的类型: readonly ,readwrite 2.原子类 :...

  • iOS objective-c 属性关键字

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

  • iOS - 基础

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

  • ios9新特性(关键字)

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

  • iOS 中weak的实现

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

  • IOS 常用关键字基础大全

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

网友评论

      本文标题:iOS之属性关键字

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