zoukankan      html  css  js  c++  java
  • IOS开发@property 属性类型归纳和介绍

    在编写IOS的代码的时候,会经常声明@property变量,每一个变量后面都会加个括号,里面会放一些属性,例如@property(nonatomic,strong).....我们现在就来归纳一下:

    1.atomic与nonatomic

    • atomic:默认是有该属性的,这个属性是为了保证程序在多线程情况,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题
    • nonatomic:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高效率。

    2.readwrite与readonly(readwritereadonly这两个属性的真正价值,不是提供成员变量访问接口,而是控制成员变量的访问权限)

    • readwrite:这个属性是默认的情况,会自动为你生成存取器。
    • readonly:只生成getter不会有setter方法。

    3.strong与weak(strongretain功能相似;weakassign相似,只是当对象消失后weak会自动把指针变为nil;

    • strong:强引用,也是我们通常说的引用,其存亡直接决定了所指向对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示在列表中,则此对象会被从内存中释放。
    • weak:弱引用,不决定对象的存亡。即使一个对象被持有无数个弱引用,只要没有强引用指向它,那么还是会被清除。

    4.assign、copy、retain

    • assign:默认类型,setter方法直接赋值,不进行任何retain操作,不改变引用计数。一般用来处理基本数据类型。
    • retain:释放旧的对象(release),将旧对象的值赋给新对象,再令新对象引用计数为1。我理解为指针的拷贝,拷贝一份原来的指针,释放原来指针指向的对象的内容,再令指针指向新的对象内容。
    • copy:与retain处理流程一样,先对旧值release,再copy出新的对象,retainCount为1.为了减少对上下文的依赖而引入的机 制。我理解为内容的拷贝,向内存申请一块空间,把原来的对象内容赋给它,令其引用计数为1。对copy属性要特别注意:被定义有copy属性的对象必须要 符合NSCopying协议,必须实现- (id)copyWithZone:(NSZone *)zone方法。
    • 也可以直接使用:
    •     使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)
          使用copy: 对NSString
          使用retain: 对其他NSObject和其子类
  • 相关阅读:
    Calling a parent window function from an iframe
    JSON with Java
    Posting array of JSON objects to MVC3 action method via jQuery ajax
    What's the difference between jquery.js and jquery.min.js?
    jquery loop on Json data using $.each
    jquery ui tabs详解(中文)
    DataTables warning requested unknown parameter
    Datatables 1.10.x在命名上与1.9.x
    jQuery 1.x and 2.x , which is better?
    DataTabless Add rows
  • 原文地址:https://www.cnblogs.com/oscar1987121/p/5231053.html
Copyright © 2011-2022 走看看