普通方法:关注(代表)对象可以”干什么”,过程中需要实例变量。-(void)show;输出 … 访问属性
    属性:属性专门处理实例变量。(程序执行过程当中)
    初始化方法:一创建对象(第一时间),给实例变量赋值。
    工厂方法:只一个方法,帮我们解决创建对象问题、初始化对象的问题。工厂方法创建对象最简单。(对象达到一定量级)

补:在类方法中,可以调用类中创建的实例的实例方法或实例变量。

算法、设计模式:
是人们总结的一种规律,一种思想。

1.单例模式
    是一种特殊的工厂方法。
    “单例”:只有一个唯一的。
    单例模式的好处,节约资源、提高效率、统一管理。
2.内存管理
    iOS开发中,对堆内存的创建、销毁(释放),就叫做内存管理。
    内存管理有两种方式:
        MRC:手动内存管理。
        ARC:自动内存管理。

引用计数器:用来记录对象被引用的次数,每个对象天生就有一个引用计数器。
        Reference Counting
    引用的次数:一个对象被几个引用使用。
    TRStudent *stu = [[TRStudent alloc]init];
    TRStudent *stu2 = stu;
    在xcode5以后,都是强制使用ARC内存管理的。
    需要手动改成MRC内存管理:
        项目->BuildSetting->All->ARC->OC language->OC ARC=NO;
    强制操作系统立刻回收内存:
        edit scheme->Diag…->Enable Zombie Objects
    
    内存管理的机制:
        每个对象都有自己的引用计数器。        在MRC内存管理模式下,引用计数器计算机是无法自动操作的。
        向对象发送[对象 retainCount];该对象引用计数器的值
        当向对象发送alloc、copy、new消息的时候,该对象的引用计数器会自动设置为1.
        当不再使用对象的时候的时候,会发送release消息,通知引用计数器”减”1。
        当一个对象的引用计数器的值为0时,”系统”会”自动”销毁该对象,并回收该内存空间。
        当对象销毁的时候,会”自动”发送dealloc消息。
        
        内存管理使用不当:            通过引用使用一个以经不存在的对象(堆空间),会出现异常、crash(Exception)。
            解决:1.野指针问题,使用空指针来解决野指针问题。
            对象不在使用的时候,忘记发送release消息,内存溢出(内存浪费)(内存泄露)。
                            2.多个引用使用同一个对象,需要retain操作。
            解决:1.谁创建的内存(谁加1),谁就有责任减1。
                           2.声明式属性解决加1操作,但减1操作依然需要手动处理。
        
        new相当于
             [TRStudent new] 相当于 [[TRStudent alloc]init]

.m文件中的dealloc方法
        -(void)dealloc{
            NSLog(…);
            [super dealloc];
        }

3.声明式属性
  a.默认情况下 声明式属性 并没有解决内存问题
  b.如果需要解决内存问题 需要加上(retain)
      @property(retain) TRBook* book;
  c.声明式属性解决的只有setter/getter问题 加1操作
  d.dealloc中减1操作 依然需要我们自己做。
    如果一个对象中的属性是对象类型,声明式属性记得加retain关键字修饰
    当一个对象销毁的时候,应该将其拥有的属性对象,全部release
    e.@property(参数类型1,参数类型2)
        参数类型1:
            retain:修饰属性是对象类型
            assign:修饰基本数据类型,默认是assign类型
            copy:修饰一些特殊的对象类型,NSString
            readonly:只有getter方法,没有setter方法。
            readwrite:有setter方法,也有getter方法。
            getter=method:可以修改getter方法的方法名。
            setter=method:可以修饰setter方法的方法名。
        参数类型2:(多线程)
            atomic 原子性操作 解决线程安全问题 消耗资源 默认值
            nonatomic 非原子性操作 存在线程安全问题 节省资源
4.自动释放池
    a.自动释放池可以帮我们解决自动释放(release)对象的操作。    b.工厂方法存在内存释放的问题、getter内存释放的问题、创建多个对象的时候,容易忘记释放对象。
    c.语法规则 :
        @autoreleasepool{
        }
    d.默认情况下,自动释放池不会管理对象,需要手动将对象放到自动释放池中,由自动释放池管理对象。
    e.向对象发送autorelease消息,就可以将对象放到自动释放池中管理。
    f.自动释放池的开始、结束
        autorealespool{开始
            。。。
        }结束
        当自动释放池结束的时候,会向池中的对象发送release消息

OC中的属性、方法及内存管理的更多相关文章

  1. 七.OC基础加强--1.内存管理 2.野指针,内存泄露 3.set方法的内存管理 4.@property参数 5.@class和循环retain的使用 6.NSString的内存管理

    1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程 ...

  2. OC中@property属性关键字的使用(assign/weak/strong/copy)

    OC中@property属性关键字的使用(assign/weak/strong/copy) 一.assign 用于 ‘基本数据类型’.‘枚举’.‘结构体’ 等非OC对象类型 eg:int.bool等 ...

  3. set方法的内存管理细节

    一.多个对象之间的内存管理 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作) 2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次releas ...

  4. js中__proto__, property, prototype, 对象自身属性方法和原型中的属性方法的区别

    __proto__: 这个属性是实例对象的属性,每个实例对象都有一个__proto__属性,这个属性指向实例化该实例的构造函数的原型对象(prototype). proterty:这个方法是对象的属性 ...

  5. Swift中的可选链与内存管理(干货系列)

    干货之前:补充一下可选链(optional chain) class A { var p: B? } class B { var p: C? } class C { func cm() -> S ...

  6. OC 知识:彻底理解 iOS 内存管理(MRC、ARC)

    1. 什么是内存管理 程序在运行的过程中通常通过以下行为,来增加程序的的内存占用 创建一个OC对象 定义一个变量 调用一个函数或者方法 而一个移动设备的内存是有限的,每个软件所能占用的内存也是有限的 ...

  7. 内存管理2-set方法的内存管理

    1.对象之间的内存管理: 每个学生都有一本书 book类 @price 学生类  @age @book -------------------- #import "book.h" ...

  8. 高端内存映射之vmalloc分配内存中不连续的页--Linux内存管理(十九)

    1 内存中不连续的页的分配 根据上文的讲述, 我们知道物理上连续的映射对内核是最好的, 但并不总能成功地使用. 在分配一大块内存时, 可能竭尽全力也无法找到连续的内存块. 在用户空间中这不是问题,因为 ...

  9. Java中的垃圾回收机制&内存管理&内存泄漏

    1. Java在创建对象时,会自动分配内存,并当该对象引用不存在的时候,释放这块内存. 为什么呢? 因为Java中使用被称为垃圾收集器的技术来监视Java程序的运行,当对象不再使用时,就自动释放对象所 ...

随机推荐

  1. 【python】2048

    来源:https://www.shiyanlou.com/courses/368 实验楼的2048程序,在linux下可实现通过终端游戏. 主要学习的知识点: 1.状态机函数实现,用字典将状态和函数相 ...

  2. openGL纹理映射参数解析

    GLuinttexture[1]; AUX_RGBImageRec *TextureImage[1]; Status=TRUE; // Set The Status To TRUE glGenText ...

  3. python基础——字符串和编码

    python基础——字符串和编码 字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用 ...

  4. struts2 标签问题----escape="false" 这个属性

    1.在编程过程中,会遇到这个动西,escape="false" eg: <s:fielderror escape="false"/>-------& ...

  5. iOS的I/O操作

    一般而言,处理文件时都要经历以下四个步骤: 1.创建文件 2.打开文件,以便在后面的I/O操作中引用该文件 3.对打开的文件执行I/O操作(读取.写入.更新) 4.关闭文件 iOS中,对文件常见的处理 ...

  6. Linux下如何查找可执行文件

    Linux下的可执行文件 Linux下如何查找可执行文件,作为一个Linux小菜刚刚有了这个问题, 在windows中,可以通过后缀名判断是否是可执行文件,比如.exe,.bat等是可执行文件,但是在 ...

  7. JQZoom 图片放大插件的使用

    QZoom是一个基于最流行的jQuery的图片放大器插件.它功能强大,使用简便.支持标准模式.反转模式.无镜头.无标题的放大,并可以自定义jQZoom的窗口位置和渐隐效果,修正IE6的select b ...

  8. PHPExcel 类

    //引入工具类 require_once 'PHPExcel.php'; //HandleExcel.class.php 文件 class HandleExcel extends PHPExcel{ ...

  9. CDH中HDFS的WEB UI外网无法访问的问题

    文章来自:http://www.cnblogs.com/hark0623/p/4177794.html 转载请注明 其实问题很简单,因为在CDH中hdfs-site.xml配置文件中WEB UI配置的 ...

  10. POJ2125 Destroying The Graph(二分图最小点权覆盖集)

    最小点权覆盖就是,对于有点权的有向图,选出权值和最少的点的集合覆盖所有的边. 解二分图最小点权覆盖集可以用最小割: vs-X-Y-vt这样连边,vs和X部点的连边容量为X部点的权值,Y部和vt连边容量 ...