iOS开发之OC语法基础(三)--属性、点语法
来源:互联网 发布:维莎曼背带裤淘宝 编辑:程序博客网 时间:2024/05/27 14:12
一、目标
1、能够区别属性和实例变量
2、熟练使用属性和点语法
3、熟练掌握封装(面向对象三大特性之一)
二、属性
场景:一个类包含100个甚至更多实例变量,我们需要为每个实例变量进行赋值操作。
解决方式1:写100个设置器和100个访问器。
解决方式2:OC 2.0中定义了属性(property)的概念,属性是一组设置器和访问器,它简化了上述的操作,与类相似,属性需要声明和实现。
1、属性的声明
属性的声明:
属性的声明写在类的.h文件中
@property int age;
相当于声明了两个方法:
- (void)setAge:(int)age;- (int)getAge;2、属性的实现
属性的实现写在类的.m文件中
@synthesize age = _age;相当于实现了两个方法:
- (void)setAge:(int)age{_age = age;}- (int)getAge{return _age;}3、为Person类添加三个属性
Person.h
#import <Foundation/Foundation.h>@interface Person : NSObject@property NSString *name;@property NSInteger age;@property NSString *gender;//添加初始化方法- (id)initWithName:(NSString *)__name;- (void)sayHi;@endPerson.m
#import "Person.h"@implementation Person@synthesize name = _name;@synthesize age = _age;@synthesize gender = _gender;- (id)initWithName:(NSString *)__name{ self = [super init]; if (self != nil) { self.name = __name; } return self;}- (void)sayHi{ NSLog(@"%@ Hello World",self.name);}@endmain.m
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) { Person *person = [[Person alloc]initWithName:@"hehe"]; [person sayHi]; [person setName:@"Jack"]; [person sayHi]; person.name = @"xiaoming"; [person sayHi]; return 0;}注意:在声明属性和实现属性的地方会有异常,这里先跳过不处理。
三、属性的特性
刚才上面说的有异常,是因为我们没有为我们定义的属性设置特性。
属性也可以设置特性(attribute)主要包括三个方面:读写特性、原子性特性、setter语义特性
1、读写特性
读写属性可以通过厦门关键字进行设置:
readwrite 可读写(既有设置器也有访问器)默认
readonly 只读(只有访问器没有设置器)
getter = 方法名 指定访问器的方法名
setter = 方法名 指定设置器的方法名
2、原子性属性
原子性属性可以通过下面关键字设置:
nonatomic 非原子性,不保证多线程安全
atomic 原子性,多线程访问时较安全
3、语义属性
语义属性可以通以下关键字设置:
accign 直接赋值 适用于基本数据类型
retain 赋值时做内存优化 适用于对象类型
copy 复制一个副本 适用于特殊的对象类型
四、点语法
一旦我们有了实例变量的设置器和访问器就可以使用OC的点语法。
比如:p.age = 20; 等价于 [p setAge:20];
int age = p.age; 等价于 int age = [p getAge];
五、小结
1、属性和实例变量是不同的,前者是一组方法,后者是一个变量
2、定义属性@property 和 @synthesize
3、基本数据类型使用assign,对象类型使用ratain,实现了NSCopying协议的对象使用copy
4、点语法和[receiver message]是等价的
总结
如果只有访问器,能使用点语法吗?只有设置器呢?
术语和技巧
@synthesize age = _age;作用是setAge:以及age方法都是在操作实例变量_age,没有_age的话,编译器会帮你生成_age
0 0
- iOS开发之OC语法基础(三)--属性、点语法
- iOS战记 ----OC基础语法之战(三)
- iOS开发之OC语法基础(四)--内存管理
- iOS开发之OC语法基础(五)--字符串
- iOS开发之OC语法基础(六)--可见度
- iOS开发之OC语法基础(七)--集合
- OC基础之-Property(属性)和点语法
- OC基础:属性.点语法.KVC
- IOS--OC--LessonProperty 属性 点语法
- OC属性、点语法
- 自学iOS开发系列----OC(属性、点语法、修饰符)
- iOSDay12之OC属性和点语法
- IOS开发---OC语言-⑫点语法
- IOS开发笔记15-OC基础语法
- OC-----属性及点语法
- 黑马程序员-IOS基础之OC语法
- iOS开发之OC语法基础(一)--类和对象
- iOS开发之OC语法基础(二)--继承和实例化
- 寒江独钓-第二章 驱动基础知识
- 【机房收费系统】之上下机
- 第13周项目5--字符串操作
- 【uml】之用例图中的关系
- 【Linux+NS2.35】安装成功
- iOS开发之OC语法基础(三)--属性、点语法
- mina IoBuffer 处理断包、粘包
- php5.6+apache2.4+linux搭建php环境
- [PAT]1020. Tree Traversals (25)
- Chrome 控制台console的用法(学了之后对于调试js可是大大有用的哦)
- ubuntu12.04 64位系统下 下安装itk和vtk
- CSR8635利用USB数据线更新软件的办法
- 第13周项目4-用冒泡法降序排序数组
- 数据结构实验之求二叉树后序遍历和层次遍历