首页 > 代码库 > 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的区别