主要内容:实例变量可见度、方法
一、实例变量可见度
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后面的字符串作为类名使用,并未导入类的接口内容,有效避免了嵌套循环导入
原文地址:http://blog.csdn.net/phui93/article/details/41180513