zoukankan      html  css  js  c++  java
  • oc内存的理解

    oc中的内存管理,是靠引用计数器,只要计数器变成0就会回收
    可以调用returnCount方法来返回计数器数

    调用这个对象的copy,retain,new,alloc方法都可以将引用计数器+1
    当调用这个对象的release方法这个方法可以将引用计数器-1

    当一个对象快要被回收的时候会调用一个析构函数dealloc方法。一般要使用的时候,这个方法都会被复写下

    当要复写这个dealloc方法的时候,最后还是要调用一下父类的dealloc方法的,感觉和重定义初始化方法要调用父类的init一样
    -(void)dealloc{
      //insert your code;
      [super dealloc];
    }
    野指针就是访问了一块访问了一个不属于自己得内存,当堆空间被释放的时候,我们还用栈空间的指针来访问这块地址就会出错,(其中用什么来验证其指向的内存不属于自己的,还不了解)

    当[[[Student alloc]init]autorelease]这是指将这个对象放到了自动释放池子,
    当这个自动释放池被销毁的时候,池子里面的所有的对象都会调用一次release方法。


    oc内存管理法则,谁污染谁治理,
    当一个对象1要拥有一个对象的时候,可以在这个对象的setter函数里面调用一次这个对象的retain方法,引用计数器+1,
    当这个对象1dealloc方法里面调用release方法
    -(void)dealloc{
      [_book release];书就是拥有的那个对象。
      [super dealloc];
    }

    -(void)setBook:(Book *)newBook{
      _book=[newBook retain];
    }
    
    

    @class  Book;

    这个关键字可以提高编译性能。//在.h文件中,才这样声明,但当要真正用到这个类的时候用import关键字导入,在.h文件中的父类必须是用import,因为继承必须要知道这个类到底又哪些方法和属性。

    有这么一个情况,当2个类你中有我,我中有你,就必须用@class用#import会造成递归导入。

    总结就是:.h文件中用@class,在.m文件中用#import。特殊情况,视情况而定。

     

     

    静态方法的潜规则我们都将对象丢到自动释放池

    比如有个Student这个类,

    +(ID)studentWithAge:(int)age{

    Student *stu=[[[self alloc]init]autorelease];

    stu.age=age;

    return stu;

    }

     
    1.这里只记录一些学习笔记 2.这里只记录一些学习心得,如果心得方向有错,请留言 2.这里只记录一些日记(只为提升英语,暂时有点忙,等转行了开始写)
  • 相关阅读:
    proxool数据库连接池用法
    SQL Server 用链接server 同步MySQL
    使用DNSCrypt解决Dropbox污染问题
    POJ 1952 BUY LOW, BUY LOWER DP记录数据
    使用doxygen为C/C++程序生成中文文档
    构造器(二)----指定构造器、便利构造器
    Spring Boot 部署与服务配置
    排序算法c语言描述---冒泡排序
    【转】Android Studio系列教程一--下载与安装
    【转】Windows环境下Android Studio v1.0安装教程
  • 原文地址:https://www.cnblogs.com/liyang31tg/p/3608059.html
Copyright © 2011-2022 走看看