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

时间: 2024-08-10 23:25:08

iOS - strong 和 assign的区别的相关文章

ios OC 关键字 copy,strong,weak,assign的区别

一.先介绍 copy.strong.weak 的区别,如代码所示 @property(copy,nonatomic)NSMutableString*aCopyMStr; @property(strong,nonatomic)NSMutableString*strongMStr; @property(weak,nonatomic)NSMutableString*weakMStr; @property(assign,nonatomic)NSMutableString*assignMStr; NSMu

strong,weak,assign的区别

使用assign:对基础数据类型(NSInteger)和C数据类型(int,float,double,char等).使用copy:对NSString:使用retain(引起引用计数加1):对其他NSObject(实例对象)和其子类: 属性关系有两种主要类型:strong和weak,相当于非ARC环境里的retain和assign.只要存在一个强引用,对象就会一直存在,不会被销毁. Objective-C中一直存在循环引用的问题,但在实际应用中很少出现循环引用.对于过去那些使用assign属性的地

【iOS面试系列-1】iOS中@property 后assign,copy,retain,weak,strong的意义与区别(必考-必须详细掌握)

来源:网络 assign: 普通(简单)赋值,一般常用于基本数据类型,常见委托设计模式,一次来防止循环引用.不更改索引计数(Reference Counting). 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等) retain:保留计数,获得到了对象的所有权,引用计数在原有基础上+1.释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 .我们给那块内存设一个引用计数,当内存被分配并且赋值给a时,引用

iOS开发-assign、retain、copy、strong、weak的区别

对于初学的开发者,对于assign.retain.copy.strong.weak的用法及意义可能不是很明白,我对于这个问题也研究了很久,写篇博文,巧巧代码,让我们来瞧瞧吧! 先定义一个Student类: #import <Foundation/Foundation.h> @interface Student : NSObject @property (nonatomic, copy) NSString *name; @end 然后先是mrc下的assign声明 @property (nona

iOS中copy,retain,strong,assign,weak的区别以及使用

使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等)使用copy: 对NSString使用retain: 对其他NSObject和其子类 assign就是简单的赋值,不更改引用计数,所以直接使用基础数据 copy是直接拷贝内容,成为一个新的对象. retain释放旧的对象,将旧对象的值赋给新的对象,并使新的对象的引用计数加1 retain是指针拷贝 copy是分配新的内存属于内容拷贝,在拷贝之前都会释放旧的对象 在ARC中

ios中strong, weak, assign, copy

copy 和 strong(retain) 区别 1. http://blog.csdn.net/itianyi/article/details/9018567 大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有什么区别呢? 比如: @property (retain,nonatomic) NSString *rStr; @property (copy, nonatomic)   NSString *cStr; - (void)test: { NSMutabl

strong和copy的区别

strong和copy的区别 问题描述 在定义一个类的property时候,为property选择strong还是copy特别注意和研究明白的,如果property是NSString或者NSArray及其子类的时候,最好选择使用copy属性修饰.为什么呢?这是为了防止赋值给它的是可变的数据,如果可变的数据发生了变化,那么该property也会发生变化. 代码示例 还是结合代码来说明这个情况 @interface Person : NSObject @property (strong, nonat

ios中@class和 #import区别

很多刚开始学习iOS开发的同学可能在看别人的代码的时候会发现有部分#import操作写在m文件中,而h文件仅仅使用@class进行声明,不禁纳闷起来,为什么不直接把#import放到h文件中呢?这 是因为h文件在修改后,所有import该h文件的所有文件必须重 新build,因此,如果把#import写在h文件中,import该h文件的文件也就会产生不必要的编译,增加编译时间,特别是在项目文件多的情况 下.想象一下,如果只是修改一个h文件而导致上百个文件不必要的编译,那是一件多么让人纠结的事情.

iOS strong,copy,retain,weak,assign的区别,以及各自的用法

1:ARC环境下,strong代替retain.weak代替assign 2:weak的作用:在ARC环境下,所有指向这个对象的weak指针都将被置为nil.这个T特性很有用,相信很多开发者都被指针指向已释放的对象所造成的EXC_BAD_ACCESS困扰过,使用ARC以后,不论是strong还是weak类型的指针,都不会再指向一个已经销毁的对象,从根本上解决了意外释放导致的crash. 3:assign的作用:简单赋值,不改变引用计数,对基础数据类型 (例如NSInteger,CGFloat)和