zoukankan      html  css  js  c++  java
  • 1.ARC下是否有内存溢出等问题 2.@property参数 3.#import和@class的区别

    1.ARC下是否有内存溢出等问题?

      答案:必须要担心啊,ARC也不是万能的。答案:必须要担心啊,ARC也不是万能的。这里主要是涉及到集合类的数据类型

           比如数组,我们定义了一个可变数组muarr1,然后把一个对象p1加到muarr1中,此时会对这个对象 retain一次,相当于retainCount+1,

          只有当这个数组removeObject:p1删除这个对象时、或者这个数组自己 muarr1=nil;了,或者这个数组removeAllObjects时,

                 它才会对这个对象或者里面所有对象release一次。

    2.@property参数

      一:1)是否要生成set方法(若为只读属性,则不生成) 

        readonly:只读,只会生成getter的声明和实现 
        readwrite:默认的,同时生成setter和getter的声明和实现 


         2)多线程管理(苹果在一定程度上屏蔽了多线程操作) 
        nonatomic:高性能,一般使用这个 
        atomic:低性能,默认 


         3)内存管理相关参数 
        retain: 对对象release旧值,retain新值(适用于OC对象类型) 
        assign: 直接赋值(默认,适用于非oc对象类型) 
        copy: release旧值,copy新值 
        验证assign如果作用在对象上,实际上就是直接赋值 


         4)set和get方法的名称 
        修改set和get方法的名称,主要用于布尔类型。因为返回布尔类型的方法名一般以is开头,修改名称一般用在布尔类型中的getter。 
        @property(nonatomic,assign, setter=abc:,getter=haha)int age

      二、ARC下@property参数 
          ARC中的@property
          strong : 用于OC对象, 相当于MRC中的retain
          weak : 用于OC对象, 相当于MRC中的assign
          assign : 用于基本数据类型, 跟MRC中的assign一样
          copy : 一般用于NSString, 跟MRC中的copy一样 
          在ARC情况下解决”循环retain”的问题:
          @property一边用strong,一边用weak。

      三.1,getter=getterName,setter=setterName,设置setter与getter的方法名,除非你想自己取名,否则一般使用默认的名字即可。以免造成混乱。

          2,readwrite,readonly (只生成getter方法),设置可供访问级别的限制。
          2,assign,调用setter方法时直接赋值,不进行任何retain操作。
          3,retain,调用setter方法时,先release旧值,然后对赋予的新值执行retain,相当于一次指针的拷贝。
          4,copy,setter方法进行Copy操作,与retain处理流程一样,先release旧值,再Copy出新的对象,retainCount为1。其实是建立一个新的对象。
          5,nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,

        造成   数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

    3.#import和@class的区别。 
        1.作用上的区别 
        #import会包含引用类的所有信息(内容), 包括引用类的变量和方法 
        @class仅仅是告诉编译器有这么一个类, 具体这个类里有什么信息, 完全不知 

        2.效率上的区别 
        如果有上百个头文件都#import了同一个文件,那么一旦最开始的头文件稍有改动,后面引用到这个文件的所有类都需要重新编译一遍 , 编译效率非常低 相对来讲,

        使用@class方式就不会出现这种问题了

  • 相关阅读:
    Falsy Bouncer(算法)
    Check for Palindromes(算法)
    ecshop 修改模板可输出php代码
    ecshop显示所有分类树栏目
    ecshop首页调用评论及图片
    ECSHOP 商品评论条件修改——购买过该商品且只能评价一次(购买多少次能评价多少次)
    PS4破解
    Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法
    Java中类方法与实例方法的区别
    Java中类及方法的加载顺序
  • 原文地址:https://www.cnblogs.com/jiayongqiang/p/5095601.html
Copyright © 2011-2022 走看看