2、实例变量可⻅度与方法
2015-11-02 21:58
295 查看
实例变量可⻅度
可见度 | 特点 |
---|---|
public(公有的) | 实例变量可以在类的外部和内部操作 |
protected(受保护的,默认的) | 实例变量只能在该类和其⼦类内操作 |
private(私有的) | 实例对象只能在该类内访问 |
// .h文件中 @interface Person : NSObject { @public NSString *_hobby; //兴趣 @protected NSString *_name; //姓名 int _age; //年龄 @private NSString *_sex; //性别 } // main函数文件中 //@public Person * p = [[Person alloc] init]; p -> _hobby = @“听⾳乐、看电影”; NSLog(@"⼈的兴趣:%@",p -> _hobby); //@protected
//@private
注意事项:
为什么不使⽤@public?
使⽤@public关键字,暴露了类内部的细节
不符合⾯向对象语⾔的三⼤特性之⼀——封装
如何在其他⽂件中访问对象@protected修饰的实例变量?
提⽰:添加两个⽅法
赋值:通过⽅法传⼊参数,在类的内部实现实例变量赋值
取值:通过⽅法获取实例变量的值
⽅法
无参方法声明实现及调用
对象方法
对象方法以-开头如 -(void)xx;对象方法只能由对象来调用
对象方法中可以访问当前对象的成员变量
调用格式 [对象名 对象方法名];
类方法
类方法以+开头 如+(void)put;类方法只能由类来调用
类方法中不能访问实例(成员)变量,因为类方法由类来调用,并没有创建存储空间来存储类中的成员变量
调用格式:[类名 类方法名];
类方法的好处和适用场合:
不依赖于对象,执行效率更高;
能用类方法解决的问题,尽量使用类方法;
场合:当方法内部不需要使用到成员变量时,可以改为类方法。
声明
//方法类型 返回值类型 方法名 - (double) pi;
调用
使用对象调用方法就是OC中的消息机制oc语言中采用特定的语言调用类或者实例(对象)的方法称为发送消息或方法调用。
//格式:[类名或者对象名 方法名]; Person * p = [[Person alloc] init]; [p eat];
有参有返回值
方法名
删除:类型标识,返回类型,参数类型,参数名,空格。例如:replaceObjectAtIndex:withObject:
类中不能出现同名⽅法。
“ : ” 标识参数,不能省略。有冒号必须有参数。
初始化、赋值、取值⽅法(init、setter、getter)
初始化
//.h 文件 //声明属性 @interface AoDiCar : NSObject { NSString *_color; int _lunzi; NSString *_pinpai; } //init -(id)initWithColor:(NSString *)color lunzi:(int)lunzi pinpai:(NSString *)pinpai; //.m 文件 //init -(id)initWithColor:(NSString *)color lunzi:(int)lunzi pinpai:(NSString *)pinpai{ _color = color; _lunzi = lunzi; _pinpai = pinpai; return self; }
单个参数
//.h 文件 //赋值 - (void)setName:(NSString *)name; //取值 - (NSString *)getName; //.m 文件 //赋值 - (void)setName:(NSString *)name{ _name = name; } //取值 - (NSString *)getName{ return _name; }
多个参数
//.h 文件 //setter -(void)setColor:(NSString *)color lunzi:(int)lunzi//注意,这里没有分号 pinpai:(NSString *)pinpai;//这里才有分号 //getter -(NSString *)color; -(int)lunzi; -(NSString *)pinpai; //.m 文件 //setter -(void)setColor:(NSString *)color lunzi:(int)lunzi pinpai:(NSString *)pinpai{ _color = color; _lunzi = lunzi; _pinpai = pinpai; } //getter -(NSString *)color{ return _color; } -(int)lunzi{ return _lunzi; } -(NSString *)pinpai{ return _pinpai; }
调用
//main函数 AoDiCar *car1 = [[AoDiCar alloc] initWithColor:@"黑色" lunzi:4 pinpai:@"不造"];//初始化 NSLog(@"%@奥迪有%d个轮子,品牌%@",[car1 color],[car1 lunzi],[car1 pinpai]);//输出初始化的数据 [car1 setColor:@"红色" lunzi:4 pinpai:@"不造"];//用setter赋值 NSLog(@"%@奥迪有%d个轮子,品牌%@",[car1 color],[car1 lunzi],[car1 pinpai]);//用getter取值
@class
用于引入类,但并不引入类的属性IOS基础:深入理解Objective-c中@class的含义
objective-c中,当一个类使用到另一个类时,并且在类的头文件中需要创建被引用的指针时,有两种办法:
一种是通过#import方式引入;另一种是通过@class引入;
#import "B.h"//引入类,同时引入类属性 @class B;//仅引入类 @interface A : NSObject { //A类是引用类,B类是被引用类 B *b; } @end
### instancetype和id的区别
instancetype在类型表示上,跟id一样,可以表示任何对象类型;
instancetype只能用在返回值类型上,不能像id一样用在参数类型上;
instancetype比id多一个好处:编译器会检测instancetype的真实类型;
相关文章推荐
- Keil和IAR下查看占用Flash和SRAM空间大小的方法
- iOS动画 CATransition动画
- POJ1385 计算多边形的重心
- TCP/IP详解 卷1 笔记 第12章 广播和多播
- 反射小结
- 深入研究java.lang.Class类
- redis概要_codepython整理二
- 代码规范的提醒,备受煎熬的教训啊!
- PyQt4(简单界面)
- Struts2+Spring+Mybatis框架集成的搭建。(SSM形式)
- 2015中国网络安全大赛:Reinstall
- SSL加密编程(2)Windows .NET客户端1
- AngularJS API之bootstrap启动
- 学习的小小想法
- LeetCode Minimum Path Sum (简单DP)
- Struts中应用Ajax技术
- redis数据结构_codepython整理一
- 三、jQuery--jQuery基础--jQuery基础课程--第10章 jQuery UI型插件
- java web Excel导入、导出的实现
- 播放器时间转化