//
// IntroduceViewController.h
// 修饰属性介绍
//
// Created by MAC on 2017/2/4.
// Copyright © 2017年 NetworkCode小贱. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface IntroduceViewController : UIViewController
/*! assign 的介绍
* assign : 直接赋值,不改变索引计数器。
* assign 基础数据类型 (NSInteger)和C语言数据类型(int, float, double, char,等)。
*/
@property(nonatomic,assign) NSInteger A_Integer;
@property(nonatomic,assign) int A_Int;
@property(nonatomic,assign) float A_Float;
@property(nonatomic,assign) double A_Double;
@property(nonatomic,assign) char A_Char;
/*! assign 修饰的对象,后期对该对象做任何处理,该对象的引用计数器都不增加。
*/
@property(nonatomic,assign) NSString * A_String;
/*! assign 修饰可变的对象,原始对象发生改变,该对象也跟着改变。
* 如果该对象发生改变,原始对象也跟着改变
*/
@property(nonatomic,assign) NSMutableString * A_MutableString;
/*! assign 修饰的UI控件对象,后期不能做copy处理,但可以修改。
*/
@property(nonatomic,assign) UIView * A_View;
/*! assign 的总结
* 原理:
-(void)setA:(int)a{
_a=a;
}
* 结论: assign 有原理可得,assign 是直接赋值。assign 修饰的是对象,则该对象后期的任何处理都不引起该对象的计数器增加。
* 注意:1》 assign 修饰可变的对象(_a),则该对象(_a)和原始对象(a)之间是相通的,这两个中任意一个改变,其他一个就跟着改变。2》assign 修饰的UI控件对象,该对象后期不能被copy。
*/
/*! retain 的介绍
* retain :释放旧值,获取新值,增加输入对象的引用计数。
* retain 对其他NSObject和其子类
*/
@property(nonatomic,retain) NSString * R_String;
@property(nonatomic,retain) UIView * R_View;
@property(nonatomic,retain) NSMutableString * R_MutableString;
/*! copy 的介绍
* copy :先释放旧的对象。创建一个和输入对象相同的对象,地址不同,内容相同。
* copy 多用于不可变的字符串(string)。
*/
@property(nonatomic,copy) NSString * C_string;
@property(nonatomic,copy) NSMutableString * C_MString;
/*! copy:对于不可变对象copy采用的是浅复制,引用计数器加1(其实这是编译器进行了优化,既然原来的对象不可变,复制之后的对象也不可变那么就没有必要再重新创建一个对象了);对于可变对象copy采用的是深复制,引用计数器不变(原来的对象是可变,现在要产生一个不可变的当然得重新产生一个对象);
*/
/*! strong 的介绍
* strong 是强制的引用。当前对象被其他对象引用时,会执行retain操作,引用计数器+1。当retainCount=0时,该对象才会被销毁。
* strong 类和对象
*/
@property(nonatomic,strong) NSString * S_String;
@property(nonatomic,strong) UIView * S_View;
/*! week 的介绍
* week 一般修饰UI控件
* 即使一个对象被持有无数个若引用,只要没有强引用指向他,那麽其还是会被清除.
*/
@property(nonatomic,weak) UITableView * W_TableView;
/*!nonatomic 的介绍
* atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择
*/
/*! week 和 strong 的解释
* (weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。
一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。
* 举例:
想象我们的对象是一条狗,狗想要跑掉(被释放)。
strong型指针就像是栓住的狗。只要你用牵绳挂住狗,狗就不会跑掉。如果有5个人牵着一条狗(5个strong型指针指向1个对象),除非5个牵绳都脱落 ,否着狗是不会跑掉的。
weak型指针就像是一个小孩指着狗喊到:“看!一只狗在那” 只要狗一直被栓着,小孩就能看到狗,(weak指针)会一直指向它。只要狗的牵绳脱落,狗就会跑掉,不管有多少小孩在看着它。
只要最后一个strong型指针不再指向对象,那么对象就会被释放,同时所有的weak型指针都将会被清除。
*/
@end
assign\strong\retain\copy\week\nonatomic 介绍
最新推荐文章于 2021-09-22 14:27:14 发布