第05天OC语言(07):property修饰符
2017-07-16 00:00
274 查看
不要等到明天,明天太遥远,今天就行动。
#####须读:看完该文章你能做什么?
对property关键字的修饰符,深刻理解.对于修饰符的<底层原理>有一个深刻了解
#####学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)
1.property关键字是用来干什么的,
2.synthesize关键字是用来干什么的
3.property在Xcode4.4之后都干了些什么
#####一、本章笔记
#####二、code
######main.m
######Person
######Room
######Car
######Dog
#####须读:看完该文章你能做什么?
对property关键字的修饰符,深刻理解.对于修饰符的<底层原理>有一个深刻了解
#####学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)
1.property关键字是用来干什么的,
2.synthesize关键字是用来干什么的
3.property在Xcode4.4之后都干了些什么
1.编译器只要看到 @property, 就知道我们要生成某一个属性的 getter/setter方法的声明 2.synthesize 是一个编译器指令,它可以简化 我们getter/setter方法的实现 3.从Xcode4.4以后 Apple 对 @property进行一个增强,以后只要利用一个 @property 就可以同时生成 setter 、 getter 方法的声明 和实现
#####一、本章笔记
一、setter方法内存管理 1.判断传入的对象 和当前的对象是否一样 2.release 以前对象 3.retain 传入的对象 二、property关键字的修饰符 readonly : 只会生成getter方法 readwrite : 即会生成getter 也会生成 setter, 默认什么都不写 就是readwrite getter : 可以给生成的getter方法 起一个名称 setter : 可以给setter方法 起一个名称 retain : 就会自动给我们 生成setter/getter方法 内存管理的代码 assign : 不会帮我们生成 setter方法内存管理的代码, 仅仅只会生成 普通 getter/ setter方法, 默认什么不写 就是assign - (void)setAge:(int)age; - (int)age; - (void)setAge:(int)age { _age = age; } - (int)age { retrun _age; } 多线程 atomic : 性能低(默认) nonatomic : 性能高 在iOS开发中 99% 都是些 nonatomic 三、 1.相同类型的property修饰符 不能同时使用 2.不同类型的property修饰符 可以多个结合在一起使用, 多个之间用,隔开 3.iOS开发 只要写上property ,那么就立刻写上 nonatomic
#####二、code
######main.m
#pragma mark 07-property修饰符
#pragma mark 概念
/*
一、setter方法内存管理 1.判断传入的对象 和当前的对象是否一样 2.release 以前对象 3.retain 传入的对象 二、property关键字的修饰符 readonly : 只会生成getter方法 readwrite : 即会生成getter 也会生成 setter, 默认什么都不写 就是readwrite getter : 可以给生成的getter方法 起一个名称 setter : 可以给setter方法 起一个名称 retain : 就会自动给我们 生成setter/getter方法 内存管理的代码 assign : 不会帮我们生成 setter方法内存管理的代码, 仅仅只会生成 普通 getter/ setter方法, 默认什么不写 就是assign - (void)setAge:(int)age; - (int)age; - (void)setAge:(int)age { _age = age; } - (int)age { retrun _age; } 多线程 atomic : 性能低(默认) nonatomic : 性能高 在iOS开发中 99% 都是些 nonatomic 三、 1.相同类型的property修饰符 不能同时使用 2.不同类型的property修饰符 可以多个结合在一起使用, 多个之间用,隔开 3.iOS开发 只要写上property ,那么就立刻写上 nonatomic */
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark - main函数
int main(int argc, const char * argv[])
{
Person *p = [Person new];
Room *r = [Room new];
Car *c = [Car new];
Dog *d = [Dog new];
p.room = r;
[r release];
/*
p.car = c;
p.dog = d;
[d release];
[c release];
[r release];
[p release];
*/
#pragma mark setter方法内部的内存管理两种情况
// 换房了
// Room *r2 = [Room new];
// p.room = r2;
// [r2 release];
// 重复赋值
p.room = r;
/*
通过 是用retain的修饰符验证
retain 内部是这样做的
- (void)setRoom:(Room *)room
{
if (_room != room) {
[_room release];
_room = [room retain];
}
}
*/
[p release];
return 0;
}
######Person
>>>.h #import <Foundation/Foundation.h> #import "Room.h" #import "Car.h" #import "Dog.h" @interface Person : NSObject { Room *_room; Car *_car; Dog *_dog; } /* - (void)setRoom:(Room *)room; - (void)setCar:(Car *)car; - (void)setDog:(Dog *)dog; - (Room *)room; - (Car *)car; - (Dog *)dog; */ /* readonly : 只会生成getter方法 readwrite : 即会生成getter 也会生成 setter, 默认什么都不写 就是readwrite getter : 可以给生成的getter方法 起一个名称 setter : 可以给setter方法 起一个名称 retain : 就会自动给我们 生成setter/getter方法 内存管理的代码 assign : 不会帮我们生成 setter方法内存管理的代码, 仅仅只会生成 普通 getter/ setter方法, 默认什么不写 就是assign - (void)setAge:(int)age; - (int)age; - (void)setAge:(int)age { _age = age; } - (int)age { retrun _age; } 多线程 atomic : 性能低(默认) nonatomic : 性能高 在iOS开发中 99% 都是些 nonatomic */ //@property(retain) int age; #pragma property 修饰符 //@property(retain) Room *room; // 1.相同类型的property修饰符 不能同时使用 // 2.不同类型的property修饰符 可以多个结合在一起使用, 多个之间用,隔开 // 3.iOS开发 只要写上property ,那么就立刻写上 nonatomic @property(nonatomic,retain) Room *room; @end >>>.m #import "Person.h" @implementation Person /* setter方法内存管理 1.判断传入的对象 和当前的对象是否一样 2.release 以前对象 3.retain 传入的对象 */ /* - (void)setRoom:(Room *)room { if (_room != room) { [_room release]; _room = [room retain]; } } - (void)setCar:(Car *)car { if (_car != car) { [_car release]; _car = [_car retain]; } } - (void)setDog:(Dog *)dog { if (_dog != dog) { [_dog release]; _dog = [_dog retain]; } } - (Room *)room { return _room; } - (Car *)car { return _car; } - (Dog *)dog { return _dog; } */ - (void)dealloc { [_room release]; [_car release]; [_dog release]; NSLog(@"%s",__func__); [super dealloc]; } @end
######Room
>>>.h #import <Foundation/Foundation.h> @interface Room : NSObject @end >>>.m #import "Room.h" @implementation Room - (void)dealloc { NSLog(@"%s",__func__); [super dealloc]; } @end
######Car
>>>.h #import <Foundation/Foundation.h> @interface Car : NSObject @end >>>.m #import "Car.h" @implementation Car - (void)dealloc { NSLog(@"%s",__func__); [super dealloc]; } @end
######Dog
>>>.h #import <Foundation/Foundation.h> @interface Dog : NSObject @end >>>.m #import "Dog.h" @implementation Dog - (void)dealloc { NSLog(@"%s",__func__); [super dealloc]; } @end
相关文章推荐
- 第04天OC语言(05):property修饰符
- 第08天OC语言(07):NSMutableArray
- 第03天OC语言(07):self注意点和应用场景
- OC语言9-@property @synthesize和id
- OC语言-07-OC语言-Foundation框架
- 第01天OC语言(07):第一个OC方法
- OC语言@property @synthesize和id
- OC语言@property @synthesize和id
- OC语言@property @synthesize和id
- OC语言——点语法和成员变量的4种作用域及property和synthesize的使用
- 李洪强iOS开发之OC语言@property @synthesize和id
- OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法
- 第06天OC语言(07):MRC转ARC
- OC语言@property @synthesize和id
- 第04天OC语言(07):new实现原理
- 第05天OC语言(08):多个对象内存管理练习分析
- 第05天OC语言(06):set方法内存管理
- 第05天OC语言(05):多对象内存管理
- OC语言—property与synthesiz
- 第04天OC语言(04):property增强