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

最新文章

  1. Back to openGL!
  2. ASP.NET中进行消息处理(MSMQ) 一(转)
  3. STM32启动文件选择说明
  4. 四 mybatis开发dao的方法
  5. WindowsApi 解压缩文件
  6. jquerymobile使用技巧
  7. frame,bounds,center分析
  8. linux device driver —— ioctl
  9. SharePoint 设置Lookup 字段的值
  10. CSS基本知识介绍
  11. Linux系统编程读书笔记
  12. mac攻略(2) -- apache站点配置
  13. phpstudy打开网页很慢如何处理
  14. jenkins远程执行脚本时报Bad version number in .class file
  15. Python 反射机制之hasattr()、getattr()、setattr() 、delattr()函数
  16. Java 一些知识点总结
  17. SecureCRT通过拷贝配置文件登陆
  18. 指数型生成函数(EGF)学习笔记
  19. (26)基于cookie的登陆认证(写入cookie、删除cookie、登陆后所有域下的网页都可访问、登陆成功跳转至用户开始访问的页面、使用装饰器完成所有页面的登陆认证)
  20. Tomcat启动项目时内存溢出问题如何解决

热门文章

  1. CodeForces - 404A(模拟题)
  2. Human Gene Functions(poj 1080)
  3. cf112a(水题)
  4. LogBack sl4j 通过MDC实现日志记录区分用户Session[以Spring mvc为例]
  5. mac安装nginx
  6. [译] UML中的关系之Dependency
  7. Linux常用命令_(进程管理)
  8. Sql 字符串替换
  9. BZOJ3672 : [Noi2014]购票
  10. vnc使用