• iOS


              ios中的OC是一门面向对象的编辑语言,每一个对象都是类的实例,在OC中每一个对象都有一个名为isa的指针,指向该对象的类。所有NSObject是一个包含isa指针的结构体。

          (1) assign 和 weak 一样是一个弱引用;

          (2) strong是强引用;

          弱引用和强引用在引用的过程中最重要的是引起内存的变化,和内存管理,在setter方法赋值过程中,指针的数值会发生变化,在使用之前每一个实例的指针数字都是1,,alloc,release的时候会+1,使用过后释放内存,进行dealloc进行-1,当-1 之后减到0以后,就执行dealloc进行释放。举例如下。具体的赋值代码:

         (1)- property(nonatomic, assign)NSObject * a;

                - (void)setA:(int) a {

                 - a = a;

                 }

              在弱引用的情况下,直接进行赋值,即原本指针的值为1,赋值以后没有将指针的数字增大,还是1;

           (2) - property(nonatomic, strong)NSObject * a;

                - (void)setA:(int) a {

                [_a release];

                 - a = [a strong];

                 }

             在请引用的情况下,进行+1之后再赋值,使用过后-1仍然是1,返回之前的状态,置为nil。

             而assign,在使用之后也不进行-1,还是1,但是指向的东西却没有了,总是没有变化,也不会指向nil,所以就会发生混乱。

            之前在写一个五子棋的小游戏的时候,就遇到这个问题,assign和strong使用错误,就遇到了系统显示意外的错误。

            例子可以访问我的github地址:https://github.com/leroypus/-,ios新手,有错可以留言,谢谢

                     

  • 相关阅读:
    JavaScript
    Eclipse修改类的注释模板
    无法解析指定的连接标识符的解决办法
    MySQL
    IDEA修改SQL语句的关键字大写
    iframe中操作后通过后台返回脚本,让父窗口刷新
    IDEA启动Tomcat控制台打印乱码
    Eclipse如何打开文件的磁盘位置
    深度学习目标检测算法综述(论文和代码)
    关于并发,异步,非阻塞(python)疑惑的一些资料解答
  • 原文地址:https://www.cnblogs.com/lepus/p/5825296.html
Copyright © 2020-2023  润新知