成员变量、属性、合成方法
来源:互联网 发布:linux安装kvm虚拟机 编辑:程序博客网 时间:2024/06/08 14:19
1.属性
ARC: 默认为(nonatomic,assign)
创建对象时一般应强引用,声明为:对象(nonatomic,retain) 字符串(nonatomic,copy) 基本类型(nonatomic,assign)
MRC:默认为(nonatomic,weak)
创建对象时一般应强引用,声明为:对象(nonatomic,strong) 字符串(nonatomic,copy) 基本类型(nonatomic,weak)
@property (nonatomic) int xxxx;
- (void)setXxxx:(int)xxxx;
- (int)xxxx;
自动声明setter和getter方法
@synthesize xxxx = _xxxx;
自动实现setter和getter方法
assign 直接赋值
readonly 只生成getter方法 不会产生setter
readwrite 生成setter和getter方法
atomic 原子操作 考虑线程安全
nonatomic 非原子操作 不考虑线程安全
一般iOS程序中,所有属性都声明为nonatomic。
atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。
从xcode4.3版本开始 可以只写@property int x; 不写@synthesize x = _x;
编译器会自动的加上@synthesize x = _x;
@synthesize b = _b; 当编译器执行@synthesize这句话首先查看类的成员变量中有没有_b 如果有那么生成的setter和getter方法直接变量_b操作 如果没有那么@synthesize会自动的创建一个私有的成员变量_b,并且自动生成setter和getter方法对_b变量进行赋值和读取
2.合成方法
@synthesize score = _blood;
// 合成
// 这样合成相当于
// 1. 成员变量:float _blood;
// 2. - (void)setScore:(float)xxx;
// 3. - (float)score;
/ 注:如果既声明了属性,又实现它的getter setter
// 默认就不会自动合成 @synthesize height = _height;
// 我们的成员变量_height就没有了
// 解决方法1: 加成员变量float _height;
// 解决方法2: 手动合成 @synthesize height = _height;
3.属性修饰符
3.1 assign
assign是弱引用,只是指向某个对象,但是并不强引用,对于基本数据类型,比如float integer … assign写与不写都一样,因为对于基本数据类型,按值传过来的
3.2 readonly
readonly只合成getter方法,没有setter方法
readonly 只合成getter方法,没有setter方法
使用readonly相当于二步:
1. float _height;
2. - (float)height;
3. set 方法没有
3.3 readwrite
readwrite 默认 生成setter和getter方法
3.4 字符串声明成copy,而不是assign和其他东西
3.5 扩展
// @interface class name : superclass // 继承
// @interface class name (category name) // Category 扩展 类别
// @interface class name () // Extension 延展 匿名类别
// 匿名类别写在.m文件中,放一些私有的东西
4 . 深浅拷贝
4.1 浅拷贝
// Foundation基础类,字符串,数组,字典,集合,不可变类,调用copy,是浅拷贝,甚至可以理解为它的作用相当于retain
// 注意这里浅拷贝有两个条件:
// 第一是这些Foundation基础类
// 第二是不可变对象
// 第二是调用copy方法
NSArray *array = [[NSArray alloc] initWithObjects:@"one", @"two", nil]; NSArray *copyArr = [array copy];
4.2 深拷贝
// 注意:对于Foundation中这些可变对象,调用copy生成了一个新的不可变对象
// 所以这就是我们为什么常把字符串属性写成copy的原因
NSMutableArray *mArr = [[NSMutableArray alloc] initWithObjects:@"宝贝", @"真真", @"爱爱", @"连连", nil];NSArray *mArr2 = [mArr copy];
// 总结:对于系统的这些可变对象,调用copy时,是深拷贝,对象的内容被copy
- 成员变量、属性、合成方法
- OC 局部变量 成员变量 属性及方法 OC成员变量的私有性
- ios 成员变量 属性
- 成员变量和属性
- 成员变量 和 属性
- 成员变量和属性
- Objective-C——类、方法、属性、成员变量
- Objective-C——类、方法、属性、成员变量
- JAVA:类,对象,成员属性,成员方法,构造方法,类变量,类方法<2>
- ios 属性(属性变量)和成员变量
- 成员变量属性变量局部变量
- 成员变量与方法变量
- 成员变量和方法变量
- 成员变量及属性区别
- C# 字段、属性、成员变量
- OC成员变量和属性
- 成员变量和属性@property
- @property属性和成员变量
- 解决iOS支付宝支付完毕后返回app
- MyBatis 总结
- ReactJs入门教程-精华版
- sipXecs系统快照
- java的动态绑定与静态绑定
- 成员变量、属性、合成方法
- maven web 项目中启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener
- Activity的生命周期(2)
- find -mtime -type -iname -dev -perm
- 利用slidingmenu_library第三方类库 完成侧滑的实现,超详细!!!
- volley学习
- 杭电-1879继续畅通工程(kruskal)
- 应用内存优化之OnLowMemory&OnTrimMemory
- 天嵌开发版 imx6 移植qt