首页 > 代码库 > iOS - strong 和 assign的区别

iOS - strong 和 assign的区别

          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新手,有错可以留言,谢谢

                 

 

iOS - strong 和 assign的区别