第04天OC语言(04):property增强
2017-07-14 00:00
260 查看
不要等到明天,明天太遥远,今天就行动。
#####须读:看完该文章你能做什么?
你能知道property内部做了什么事情
1> 生成setter方法、getter方法
2> 在内部生成一个私有的变量(_成员变量)
3> 和@synthesize age有区别 ,@synthesize age;直接赋值给age
#####学习前:你必须会什么?
了解什么是封装。
#####一、本章笔记
#####二、code
######main.m
######Person
#####须读:看完该文章你能做什么?
你能知道property内部做了什么事情
1> 生成setter方法、getter方法
2> 在内部生成一个私有的变量(_成员变量)
3> 和@synthesize age有区别 ,@synthesize age;直接赋值给age
#####学习前:你必须会什么?
了解什么是封装。
#####一、本章笔记
一、 从Xcode4.4以后 Apple 对 @property进行一个增强,以后只要利用一个 @property 就可以同时生成 setter 、 getter 方法的声明 和实现 没有告诉 @property 要将传入的参数赋值给谁,默认 @property 会将传入的属性 赋值给 _开头的成员变量 @property 有一个弊端: 他只会生成 最简单的getter\setter方法的声明和实现,并不会对传入的数据进行过滤 如果想对传入的数据进行过滤,那么我们就必须重写 setter\getter方法 如果不想对传入的数据进行过滤,仅仅是提供一个方法给外界操作变量,那么就可以使用 如果利用 @property来生成 getter/setter方法,那么我们可以不写成员变量,系统会自动给我们生成一个 _开头的成员变量 注意: @property 自动带我们生成的成员变量 是 一个私有的成员变量, 也就是说是.m文件中生成的,而不是在.h文件中生成的 二、 如果重写了setter方法,那么property就只会生成getter方法 如果重写了getter方法,那么property就只会生成setter方法 如果同时 重写了getter/setter方法,那么@property就不会自动 带我们生成私有的成员变量 三、注意: 系统 和 @synthesize 有点区别 系统直接赋值给 _age 而使用 @synthesize age; 系统 则会赋值给 age;
#####二、code
######main.m
#pragma mark 04-property增强 #pragma mark 概念 /* 一、 从Xcode4.4以后 Apple 对 @property进行一个增强,以后只要利用一个 @property 就可以同时生成 setter 、 getter 方法的声明 和实现 没有告诉 @property 要将传入的参数赋值给谁,默认 @property 会将传入的属性 赋值给 _开头的成员变量 @property 有一个弊端: 他只会生成 最简单的getter\setter方法的声明和实现,并不会对传入的数据进行过滤 如果想对传入的数据进行过滤,那么我们就必须重写 setter\getter方法 如果不想对传入的数据进行过滤,仅仅是提供一个方法给外界操作变量,那么就可以使用 如果利用 @property来生成 getter/setter方法,那么我们可以不写成员变量,系统会自动给我们生成一个 _开头的成员变量 注意: @property 自动带我们生成的成员变量 是 一个私有的成员变量, 也就是说是.m文件中生成的,而不是在.h文件中生成的 二、 如果重写了setter方法,那么property就只会生成getter方法 如果重写了getter方法,那么property就只会生成setter方法 如果同时 重写了getter/setter方法,那么@property就不会自动 带我们生成私有的成员变量 三、注意: 系统 和 @synthesize 有点区别 系统直接赋值给 _age 而使用 @synthesize age; 系统 则会赋值给 age; */ #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]; [p setAge:25]; // NSLog(@"age = %i",[p age]); #pragma 验证系统赋值给那个age? _age? /* 注意: 系统 和 @synthesize 有点区别 系统直接赋值给 _age 而使用 @synthesize age; 系统 则会赋值给 age; */ // NSLog(@"age = %i, _age = %i",p->age,p->_age); // p->_age return 0; }
######Person
>>>.h #import <Foundation/Foundation.h> @interface Person : NSObject /* { @public int _age; int age; } */ #pragma @property增强 /* 从Xcode4.4以后 Apple 对 @property进行一个增强,以后只要利用一个 @property 就可以同时生成 setter 、 getter 方法的声明 和实现 没有告诉 @property 要将传入的参数赋值给谁,默认 @property 会将传入的属性 赋值给 _开头的成员变量 @property 有一个弊端: 他只会生成 最简单的getter\setter方法的声明和实现,并不会对传入的数据进行过滤 如果想对传入的数据进行过滤,那么我们就必须重写 setter\getter方法 如果不想对传入的数据进行过滤,仅仅是提供一个方法给外界操作变量,那么就可以使用 如果利用 @property来生成 getter/setter方法,那么我们可以不写成员变量,系统会自动给我们生成一个 _开头的成员变量 注意: @property 自动带我们生成的成员变量 是 一个私有的成员变量, 也就是说是.m文件中生成的,而不是在.h文件中生成的 */ /* - (void)setAge:(int)age; - (int)age; */ // 这里不知道赋值给 同名的age 还是 _age? @property int age; @end >>>.m #import "Person.h" @implementation Person /* { int _age; } - (void)setAge:(int)age { _age = age; } - (int)age { _age = age; } */ /* 如果重写了setter方法,那么property就只会生成getter方法 如果重写了getter方法,那么property就只会生成setter方法 如果同时 重写了getter/setter方法,那么@property就不会自动 带我们生成私有的成员变量 */ - (void)setAge:(int)age { if (age < 0) { age = 0; } _age = age; } @end
相关文章推荐
- OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法
- 第04天OC语言(05):property修饰符
- 第04天OC语言(02):property基本使用
- oc28--Property增强
- 第03天OC语言(04):自定义快捷键
- 第04天OC语言(16):类的本质及存储细节
- 第01天OC语言(04):面向对象基本概念
- 第04天OC语言(15):类工厂方法在继承中的注意点
- OC语言@property @synthesize和id
- IOS之OC语言@property @synthesize和id
- 第04天OC语言(14):类工厂方法基本概念
- 第07天OC语言(04):代理设计模式
- OC语言@property @synthesize和id
- OC语言@property @synthesize和id
- 第04天OC语言(13):自定义构造方法以及成员变量名称注意点
- OC语言@property @synthesize和id
- 第08天OC语言(04):数组排序
- OC语言——点语法和成员变量的4种作用域及property和synthesize的使用
- OC语言@property @synthesize和id
- 第04天OC语言(12):自定义构造方法在继承中的表现