普通方法:关注(代表)对象可以”干什么”,过程中需要实例变量。-(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. 删除自带OpenJDK

    1:rpm -qa|grep jdk 查看当前的jdk情况. 2:yum -y remove java java-1.7.0-openjdk* 卸载openjdk,这个过程中因为依赖原因可能会卸载一些 ...

  2. BP神经网络模型与学习算法

    一,什么是BP "BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最 ...

  3. linux下安装pymssql

    WIN下安装PYMSSQL,由于我没有系统管理权限,无法安装, 那只好在LINUX下面安装罗.. 以下这个文章帮助我搞定. http://blog.csdn.net/five3/article/det ...

  4. Java Hour 29 Weather ( 2 ) Maven

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. Hour 29 Weather 界面 数据源采用上次取得的杭州天气的json. ...

  5. Struts2中ActionContext和ServletActionContext

    转自:http://blog.sina.com.cn/s/blog_6c9bac050100y9iw.html 在Web应用程序开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在A ...

  6. SAE上传web应用(包括使用数据库)教程详解及问题解惑

    转自:http://blog.csdn.net/baiyuliang2013/article/details/24725995 SAE上传web应用(包括使用数据库)教程详解及问题解惑: 最近由于工作 ...

  7. Word2013对公式处理:样式、自动编号、交叉引用

    因快写毕业论文,专门研究了一下Word2013对公式的处理,有一点小心得,记在这里. 文章中公式展示的预期效果是:公式居中,尾端有编号,同时在文章中可以实现引用.实现该效果有很多方法,这里就说一种,其 ...

  8. 操作SQLite数据库

    本文摘自: http://docs.blackberry.com/en/developers/deliverables/25108/Creating_and_deleting_SQLite_datab ...

  9. HDU 2819 — Swap 二分匹配

    Swap Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  10. C# 中distinct的使用

    假设我们有一个类:Product public class Product { public string Id { get; set; } public string Name { get; set ...