objective-c感悟(三)属性之谜
来源:互联网 发布:2016加入淘宝客的条件 编辑:程序博客网 时间:2024/05/21 11:04
@property (readwrite, assign, setter=setCity:, getter=getCity)NSString *city;@property (copy)NSString *name;@property (retain)ARC *arc;
上面代码是oc的属性以及一些属性修饰符,oc跟c++区别这里挺大的,它提供了好多的操作的封装,一个@property在c++里要码几行代码了,但是也挺高了知识复杂度,需要仔细研究下。
@property是属性指示符,我们可以像下面一下声明属性arc,默认属性修饰符是assign与readwrite。而属性city跟name我们省略了实例变量的声明,@property可以帮我们自动生成。
@interface property : NSObject{ ARC * arc;}//@property NSString *name;@property (readwrite, assign, setter=setCity:, getter=getCity)NSString *city;@property (copy)NSString *name;@property (retain)ARC *arc;
在实现里用@synthesize是合成属性的setter与getter方法。
@synthesize name;@synthesize city;@synthesize arc;我们在c++里一般像下面一样创建setter与getter方法,在oc里面只需要写@property m_name与@synthesize m_name就可以了。
class CC{private: char m_name[20];public: const char* getName()const{ return m_name; } void setName(const char *name){ strcpy(m_name, name); }};
默认@property 的修饰是readwrite与assign,readwrite表示可读写,会帮我们生成这两个方法,如果只要生成getter,可以设置@property(readonly) m_name,表示只读。copy跟retain两个修饰用于指针的,基本类型跟结构不需要去设置。我们知道在c++中下面两个操作,一个是赋值操作,一个是拷贝构造,c++里分的很清楚,因为我们可以对对象解引用,然后赋值。而oc是扩展c的也可以解引用,但是不能对类对象赋值,那是c++类中定义的赋值操作,编译器帮我们合成的,我们也可以手动定义。
CC *person1 = new CC; CC *person2 = new CC; *person1 = *person2; //assigment CC person3 = *person2; //copy
oc里我们拷贝一个对象到另一个对象,其实就是把一个对象copy下,然后赋值给另一个对象指针,而不是重写另一个对象内存数据,就想下面一样
ARC * a = [[ARC alloc] init]; ARC * b = [[ARC alloc] init]; a = [b copy];
那么oc里我们怎么把一个对象赋值给另一个对象,而不是赋值对象指针呢。我们发现了有copy跟assign两个属性修饰符,后者是默认的,就是指针直接传值,而不是传的指针所指对象。copy就是用来解决我们上面问题的,会把对象内存拷一份副本过来覆盖原来内存数据。对于那些我们想要拷贝的属性,比如NSString类型的,A不想跟B发生联系,不想被B的改变而改变的,就用copy,如果唯一,单例就用assign,这是默认的,我们无需手动指定
最后说下retain,它会让属性的应该计数加一,关闭arc测试发现不管getter,还是setter都会导致计数加一,而NSString计数是-1。
0 0
- objective-c感悟(三)属性之谜
- objective-c感悟(二)内存管理
- Objective-C 语法三(属性值)
- Objective-C之property属性分析
- IOS之Objective-C学习笔记(三)
- IOS之Objective-C学习笔记(三)
- objective-C之NSDate相关类(三)
- objective-c感悟(一)oc简介与常用类型
- objective-c感悟(四)class、catagory、class extension、optional
- Objective-c - 多个对象的内存管理之三:为某个属性反复赋值同一个对象
- Objective-C属性介绍
- Objective-C属性介绍
- Objective-C属性介绍
- Objective-C 方法、属性
- Objective-C 方法、属性
- Objective-C 方法、属性
- Objective C 属性
- Objective-C语言:属性
- 晓月_【场景分类】
- Android 网络请求库Retrofit简单使用
- 网站验证码
- WAV文件头信息
- Matlab和java间socket通信
- objective-c感悟(三)属性之谜
- C++模板
- css画八卦图
- Struts2,Spring,Hibernate框架的优缺点
- from now on
- Android应用的耗电量统计
- Linux防火墙开放某个端口
- Database Vault注册
- #ffffffff透明度参照表