OC第二课
来源:互联网 发布:河图出版社知乐 编辑:程序博客网 时间:2024/05/17 00:59
主要内容:实例变量可见度、方法
一、实例变量可见度
public(共有的):实例变量可以在类的内部和外部使用
protected(受保护的、默认的):实例变量只能在该类及其子类中使用
private(私有的):实例对象只能在该类中使用
所谓的内部是指:@interface .... @end之间
示例:
@interface
@public / /共有的,谁都能访问
NSString *_adress ; / /地址
NSString *_hobby ; / /爱好
@protected / /受保护的、默认的,只能在该类及其子类中使用
NSString *_name ; / /姓名
NSString *_age ; / /年龄
@private / /私有的只能在该类内部使用
NSString *_gender ; / /性别
@end
一般情况下,使用默认的受保护的 @protected
为什么呢?因为使用@public关键字暴漏了类内部的组件,违背了面向对象的 “ 封装 ” 特性
下面是使用@public、@protected、@private的区别
如何在其他文件中使用protected修饰的实例变量呢?
二、方法
OC中有两种方法:
类方法:只能类使用,例如 +(id)alloc
注意:类方法中不能使用实例变量
实例方法:只能对象使用,例如:-(void)sayHi
方法名就是:去掉方法类型、返回值类型、参数类型、参数名和空格,剩下的就是方法名
例如:replaceObjectAtindex :withObject:这就是一个方法名
注意:1、类中不能出现相同的方法名
2、" : "标示参数,不能省略,有 " : "必须有参数
赋值、取值方法
示例:
- (void)setName:(NSString *)name;
- (NSString *)getName;
- (void)setName:(NSString *)name
{
_name = name;
}
- (NSString *)getName
{
return _name;
}
不过我们一般写成这种方式(多参方式:简介、省事)
示例:
- (void)setName:(NSString *)name
setAge:(int)age
setHeight:(float)height ;
- (NSString *)getName
{
return _name;
}
- (int)getAge
{
return _age;
}
- (float)getHeight
{
return _height;
}
注意:1、OC里面,为实例变量赋值的方法称为setter(设置器)
2、读取实例变量值的方法称作getter(访问器)
3、setter方法可以把参数写在一起(多参),但是获取方法getter必须分开写,一个参数一个getter方法
4、无论是setter还是getter内部操作的是实例变量,每一个实例变量都需要一对setter和getter方法
方法的使用:
在OC里面没有 “ student调用sayHi ” 这种表述
正确表述:给student对象发送sayHi消息,格式: [ student sayHi ]
三、自定义初始化方法
- (id)init这个初始化方法只能给实例变量设置默认值,不灵活
- (instancetype)initWithName:自定义初始化方法,根据需求定义初始化的方法
示例:
- (instancetype)initWithName:(NSString *)name
initWithAge:(int)age
initWithHeight:(float)height ;
- (instancetype)initWithName:(NSString *)name
initWithAge:(int)age
initWithHeight:(float)height
{
_name = name;
_age = age;
_height = height;
return self;
}
#import:导入头文件,即导入头文件中的内容到当前类
#import " " :导入自定义的类
#import <>:导入系统类库中的头文件
功能类似C语言的#include,但是可以避免头文件的重复导入
四、嵌套循环导入
创建两个类,A继承于NSObject,B继承于NSObject
A类有个实例变量 B *b;
B类有个实例变量 A *a;
这时就需要用到@class关键字
@class:告诉编译器@class后面的字符串作为类名使用,并未导入类的接口内容,有效避免了嵌套循环导入
- OC第二课
- OC第二课
- 小小君的OC第二课
- oc第二天 NSnumber
- OC- 第二讲
- OC第二讲作业
- OC第二讲作业
- OC第二天
- OC第二个周六
- oc的第二天
- oc学习第二站
- OC学习 第二节
- oc学习第二天
- OC第二天
- OC第二天数组1
- oc第二天可变 数组
- OC自学的第二天
- OC第二天—封装
- servlet的工作流程
- hnoi 2002 营业额统计(splay入门题)
- NESASM教程——第七天——使用内存
- Android error:This template requires a build target API version of at least 14, and the current vers
- 编写 Android 触摸屏手势识别程序
- OC第二课
- /bin、/sbin、/usr/bin、/usr/sbin目录的区别
- 1433欧麦咖
- MDX基本结构及多维分析
- LeetCode 38 Combination Sum
- CODE[VS] 1202
- vba汉字复制粘贴是乱码的解决办法——输入法设为中文状态!!!!
- Geoserver地图数据
- 动态折线图-Android篇