(三)
具体的来讲.h与.m文件
在.h里的@interface与@end之间在一个大括号里创建类的实例变量
NSString *_name;
NSString *_gender;
NSString *_hobby;
int _age;// 基础类型不用加*,OC里的自定义类型都需要加*,与指针类似
.h文件里方法的声明:
上次说到了减号开头的是实例方法,加号开头的是类方法
- (void)go;
+ (void)eat;
函数名前面的小括号里是函数的返回值类型,后面也可以跟若干个参数,不过参数一定要有冒号
例:参数名前也要注明参数类型
.m文件里方法的实现:
- (void)go
{
NSLog(@"我们走吧。");
}
+ (void)eat
{
NSLog(@"一起聚聚,吃个饭。");
}
在main文件里调用:
Person *person = [[Person alloc] init];
[person go];// 实例方法
[Person eat];// 类方法
(四)
实例变量的三种可见度:
@public:实例变量可以在外部或内部使用
@protected:实例变量是能在本类或它的子类中使用
@privaty:只能在本类中使用
实例变量的赋值与取值的方法(set与get):
- (void)setName:(NSString *)name; // set后面紧跟你的实例对象名字(首字母大写,省略_),还要有一个传递的参数
- (NSString *)getName;// get方法命名规则也是一样,不过没有参数
- (void)setName:(NSString *)name// setter设置器
{
_name = name;
}
- (NSString *)getName// getter访问器
{
return _name;
}
每一对setter与getter对应一个实例变量
main:
Person *person = [[Person alloc] init];
[person setName:@"李四"];
[person getName];
NSLog(@"%@", person->_name);
自定义初始化方法:
- (instancetype)initWithName:(NSString *)name;
- (instancetype)initWithName:(NSString *)name
{
_name = name;
return self;
}
main:
Child *child = [[Child alloc] init];
[child initWithName:@"李子"];
类的组合使用:
要引用某个类就得引入头文件,而这个类如果被别的类引入了并且在引用的类里创建了实例对象,被引用的类就要在自己的@interface前加上一个@class后面紧跟引用它的类名。避免了类的循环导入问题,否则编译器报错。