retain和strong,assign和weak的区别
我只说说我自己的理解哈:1、对于retain来说,一般指的是指针,这些属性需要保存引用计数,防止出现僵尸的情况,当时对于NSString类型,这个不是retain,而是copy,但是对于strong来说,这些你都不需要考虑,它会自己判断是选择retain还是copy,而对于assign来说,一是非指针变量,比如说NSInteger之类的,还有就是避免出现循环引用的时候,对于weak,其和assign差不多,但是它多了一点,就是,它会自动对该类型变量设置为nil。2、至于公司经常使用retain的原因,一个是由于编码习惯,还有就是根据项目需要。3、是否需要声明实例变量,这些都要看特殊情况的,假如在interface中你并没有声明实例变量,但是你在对于的.m文件中@synthesize的时候,那个时候其实就表明了你已经声明这个实例变量了。4、对于这个问题,系统是可以升级的,并没有什么规定iphone4s只能使用IOS4。 查看原帖>>
• copy: 用于希望保持一份传入值的拷贝,而不是值自身的情况,即把原来的对象完整的赋值到另外一地方,重新加载一内存区,一个地方变了不影响另一个地方的对象。
• assign: 简单的直接赋值,相当于说两个对象指向同个内存区,一个地方的变了,其他的也跟着改变。
• retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数 为1
那上面的是什么意思呢?
Copy 其实是建立了一个相同的对象,而 retain 不是:
比如一个 NSString 对象,地址为 0×1111,内容为@”ABC”
Copy 到另外一个 NSString 之 后,地址为 0×2222,内容相同,新的对象 retain 为 1, 旧 有对象没有变化
retain 到另外一个 NSString 之 后,地址相同(建立一个指针,指针拷贝),内容当然相 同,这个对象的 retain 值+1
assign 地址还是0x1111,内容也还是“ABC”。
也就是说,retain 是指针拷贝,copy 是内容拷贝。
strong,weak 用来修饰属性。
strong 用来修饰强引用的属性;
@property (strong) SomeClass * aObject;
对应原来的
@property (retain) SomeClass * aObject; 和 @property (copy) SomeClass * aObject;
weak 用来修饰弱引用的属性;
@property (weak) SomeClass * aObject;
对应原来的
@property (assign) SomeClass * aObject;
xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain和assign,是不支持ARC的。xcode 4.3(ios5和以上版本)之后就有了ARC,并且开始使用
strong与weak
assign: 用于非指针变量。用于
基础数据类型 (例如NSInteger)和C数据类型(int, float, double, char, 等),另外还有id
如:
@property (nonatomic, assign) int number;
@property (nonatomic, assign) id className;//id必须用assign
反正记住:前面不需要加 “*” 的就用assign吧
retain:用于指针变量。就是说你定义了一个变量,然后这个变量在程序的运行过程中会被更改,并且影响到其他方法。一般是用于字符串( NSString,NSMutableString),数组(NSMutableArray,NSArray),字典对象,视图对象(UIView ),控制器对象(UIViewController)等
比如:
@property (nonatomic,retain) NSString * myString;
@property (nonatomic, retain) UIView * myView;
@property (nonatomic, retain) UIViewController * myViewController;
xcode 4.2不支持ARC,所以会频繁使用retain来修饰,用完释放掉,而xcode4.3支持ARC,可以使用retian,不需要手动释放内存,系统会自动为你完成,如果你在xcode4.3上面开发,retian和strong都是一样的,没区别
strong和weak:
事实上
@property(nonatomic,strong) MyClass *myObject;就是相当于@property(nonatomic,retain) MyClass *myObject;@property(nonatomic, weak )id<RNNewsFeedCellDelegate>delegate;就是相当于@property(nonatomic,assign )id<RNNewsFeedCellDelegate>delegate;
现在系统自动生成的属性都是用weak来修饰的,我想应该是xcode 4.2不支持ARC,所以大家都是用retain。现在xcode4.3支持ARC了,于是苹果建议程序员放弃retain,以后都用weak。
weak 就是相当于assign,同样可以在xcode4.3开发环境下放弃使用assign 使用weak 来代替
unsafe_unretained
unsafe_unretained 就是ios5版本以下的 assign ,也就是 unsafe_unretained , weak, assign 三个都是一个样的。 因为 ios5用的是 weak ,那在ios4.3就用不了,如果你将 weak 修改为 unsafe_unretained ,那就可以用了。说到底就是iOS 5之前的系统用该属性代替 weak 来使用。
copy:这个东西估计是大部分人最不容易搞明白的东西,我也搞不明白。听别人说这个东西基本不用了,效果其实和retain没什么两样,唯一的区别就是copy只用于NSString而不能用于NSMutableString。
不过好像当一个类继承NSObject,那么这个类里面的属性需要使用copy,比如:
#import <Foundation/Foundation.h>
#import <MapKit/MKAnnotation.h>
@interface Annotation : NSObject <MKAnnotation> {
CLLocationCoordinate2D coordinate;
NSString *title;
NSString *subtitle;
}
@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
@end
反正以后就这么用就是了
反正就记住一点:xcode4.2用retain和assign ;xcode4.3或以上版本用strong与weak 。
retain和strong,assign和weak的区别
这两组词在意思上根本不存在相同或相近意义,也就是说它们在意义上风马牛不相及。
如果说找反义词,那么strong和weak可以算一对反义词。而retain, assign就没有什么关联的地方了。
1. retain: verb, to continue to have that thing(动词)保留;保持;保存
He retains a deep respect for the profession.他对这个职业仍然深怀敬意
The interior of the shop still retains a nineteenth-century atmosphere.这家商店的内部装修仍然保留着19世纪的风格。
Other countries retained their traditional and habitual ways of doing things.其他国家仍然保持着他们做事的传统和习惯。
If left covered in a warm place, this rice will retain its heat for a good hour.如果加盖放在暖和的地方,这些米饭可以保温足足一个小时。
2. strong: adjective, (someone/an animal is) healthy with good muscles and can move or carry heavy things, or do hard physical work(形容词)强壮的;健壮的;力气大的
I'm not strong enough to carry him.我力气不够大,抱不动他。
I feared I wouldn't be able to control such a strong horse.我怕我驾驭不了这么强壮的马。
3. assign: verb, give a piece of work to someone(动词)分派工作;布置作业
Later in the year, she'll assign them research papers.今年晚些时候,她将给他们指定研究论文。
When I taught, I would assign a topic to children which they would write about.我教课时会给孩子们布置一个题目,让他们就这个题目写点东西。
When teachers assign homework, students usually feel an obligation to do it.当老师布置家庭作业的时候,学生们通常觉得做作业是分内之事。
4. weak: adjective, someone is not healthy or does not have good muscles, so that they cannot move quickly or carry heavy things(身体)虚弱的,无力的
His arms and legs were weak.他的四肢虚弱无力。
I was too weak to move or think or speak.我太虚弱了,无法动弹,无法思考,也无法说话。
斗韵复方: retain和strong,assign和weak的区别 这两组词在意思上根本不存在相同或相近意义,也就是说它们在意义上风马牛不相及.如果说找反义词,那么strong和weak可以算一对反义词.而retain, assign就没有什么关联的地方了.1. retain: verb, to ...
鹤庆县18260323736: retain和strong的区别 - ?
斗韵复方: 很大区别:retain:保持 strong:强 如果是retain strong: 保持那么强
鹤庆县18260323736: ios开发 copy和strong的区别 - ?
斗韵复方: IOS内存管理详解 copy 和 retain的区别 copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对...在iOS开发过程中,属性的定义往往与retain, assign, copy有关,我想大家都很熟悉了,在此... strong与retain类似,weak与unsafe_unretained功能差不...
鹤庆县18260323736: retainretain是什么意思 - ?
斗韵复方: retain retain的中文翻译retain retain保留双语例句1,This season I expect us to retain the championship and win the European Cup.这个赛季我期待我们能够保住冠军头衔,赢得欧洲杯.2,Do you have original human resources policies to ...
鹤庆县18260323736: iOS中深拷贝,浅拷贝和retain的区别 - ?
斗韵复方: 浅拷贝:浅拷贝是对object对象的指针拷贝,让指针指向同一块内存地址,“对象永远只有一个",浅拷贝使对象的引用计数器+1.代码如下:可以看出不可变字符串的指针指向了同一地址,并没有重新开辟内存.深拷贝:深拷贝是对object对...
鹤庆县18260323736: ,retain的同义词及其造句是? - ?
斗韵复方: keep we shall retain our rights.
鹤庆县18260323736: 关于一些UI的property应该使用retain、strong还是weak还有其他一些问题?
斗韵复方: 我只说说我自己的理解哈:1、对于retain来说,一般指的是指针,这些属性需要保存引用计数,防止出现僵尸的情况,当时对于NSString类型,这个不是retain,而是copy,但是对于strong来说,这些你都不需要考虑,它会自己判断是选择retain...
鹤庆县18260323736: @property 后面可以有哪些修饰符 - ?
斗韵复方: 1.读写性修饰符:readwrite | readonly readwrite:表明这个属性是可读可写的,系统为我们创建这个属性的setter和getter方法. readonly:表明这个属性只能读不能写,系统只为我们创建一个getter方法,不会创建setter方法 2.setter相关修饰符:...
鹤庆县18260323736: 请尽可能解说remain与retain的区别和用法,THX~ - ?
斗韵复方: retain基本说一个人把某东西留下来了,比如你retain possession(保留所有权,比如物品或者足球的控制) remain可以用来说别人,请你remain在你的座位上等等 哎呀,总之最好的办法是多看看例句,然后就有语感了,'就是知道'应该用哪个.再怎么解释,再用中文分析,也不如这样有效
鹤庆县18260323736: property中属性retain,copy,assgin的含义分别是什么?有什么区别 - ?
斗韵复方: property是一种代码生成机制,能够生成不同类型的getter/setter函数,特别是如果你想要用点(.)操作符号来存取变量的话,你就能必须使用property.