普通方法:关注(代表)对象可以”干什么”,过程中需要实例变量。-(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. php的socket通信(二)

    案例一:代码详解 // 设置一些基本的变量$host = "192.168.1.99";$port = 1234;// 设置超时时间set_time_limit(0);// 创建一 ...

  2. CodeForces - 424B (贪心算法)

    Megacity Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Sta ...

  3. Java虚拟机支持的最大内存限制

    最近在开发Java的程序.本来我是一直很喜欢Java的内存管理的,不需要担心分配内存,只管分配,垃圾收集器自己会给你回收内存的.现在开发的程序数据量很大,为了速度快,我准备把所有的信息加载进内存,这样 ...

  4. 安装chocolatey

    C:\> @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.web ...

  5. LinuxC语言读取文件,分割字符串,存入链表,放入另一个文件

    //file_op.c #include <string.h> #include <stdio.h> #include <stdlib.h> struct info ...

  6. 深入浅出TCP协议的三次握手过程

    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 每一次TCP连接都需要三个阶段:连接建立.数据传送和连接释放.“三次握手”就发生在连接建立阶段. 1.三次握手( ...

  7. 【bzoj1051】 [HAOI2006]受欢迎的牛 tarjan缩点判出度算点数

    [bzoj1051] [HAOI2006]受欢迎的牛 2014年1月8日7450 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...

  8. Android 一个app启动另一个app

    最近,一个app启动另一个app,这个玩法挺火的嘛,有没有试过更新QQ到5.1版本,QQ的健康里面就可以添加其他app,实现从QQ跳转到其他app应用.这个挺好玩的,一下子带来了多少流量啊. 一.先来 ...

  9. web service介绍

    WEB SEVICE平台 web Service 三种基本元素: SOAP .WSDL .UDDI 什么是SOAP:       XML+HTTP 基本的Web Service平台 SOAP 简易对象 ...

  10. 【BZOJ】3781: 小B的询问(莫队算法)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3781 还能不能再裸点.. #include <cstdio> #include < ...