在一个工程中创建一对类文件.h和.m文件
.h为接口文件(写属性和方法声明)
.m为实现文件(写方法的实现)
新建一个Person类
.h文件中的代码为
/*
一、类包含两部分:声明和实现,借口和实现
接口部分:一般写类的声明,定义在.h文件中
实现部分:写类相关方法的实现,定义在.m文件中
类的声明格式:
@interface 类名:父类名
{
// 实例变量列表 类的特征
}
方法列表 类的行为
@end
声明中,实例变量和方法都必须写在@interface和 @end之间
*/
@interface Person : NSObject
{
// 实例变量
// NSString 是OC的字符串类型
// OC中的类型在定义是,需要在变量名称前加*
// 实例变量的命名要以_开头
NSString *_name;
NSString *_sex;
int _age;
float height;
}
//行为
//格式
// - (返回值类型)方法名称:(参数类型1)参数名称1
//当没有参数的时候,可以省略:
- (void)makeMoney;
- (void)sayHi;
@end
// 在一个.h文件中可以有多个类的声明
//在一个.m文件中可以有多了类的实现
//类与文件的名称没有任何关系
//类不可以交叉声明
//实现也不可以交叉和嵌套
@interface Girl : NSObject
{
// 实例变量的访问权限
// 三种:公开,保护,私有
// 从当前关键字开始,到下一个关键字之间的所有实例变量都属于当前的权限
// 公开权限:当前类内部和外部都可以访问的设置
@public //公开实例变量的关键字
NSString *name; //姓名
// 保护权限:当前类和子类的内部可以访问和设置
@protected //保护实例变量的关键字
int _age; //年龄
// 私有权限:只有当前类的内部可以访问和设置
@private //私有
NSString *_phoneNumber; //电话号码
}
//跳舞
- (void)dance;
//唱歌
- (void)sing;
@end
@interface Boy : NSObject
{
NSString *_name;
int _age;
NSString *_number;
}
- (void) fight;
- (void) makeMoney;
@end
在.m文件中为
/*
类的实现格式:
@implementation 类名
方法的实现
@end
*/
@implementation Person
-(void)makeMoney{
//Nslog比c语言的printf多了一下功能:
// 输出时多了当前运行的时间,工程名称
// 在内容末尾多了换行
printf("赶紧赚钱,二胎都开放了。。");
// OC中字符串前面要加@
NSLog(@"二胎养不起。。。。");
}
-(void)sayHi{
NSLog(@"hello world!!!");
}
@end
@implementation Girl
- (void)dance{
NSLog(@"在跳舞。。。");
}
-(void)sing{
NSLog(@"在唱歌。。。");
}
@end
@implementation Boy
-(void)fight{
NSLog(@"来,打一架吧!!");
}
- (void)makeMoney{
NSLog(@"赚钱养家!!");
}
- (void)say{
NSLog(@"nihao");
}
@end
在主函数中为
先得载入头文件
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
// 创建对象
// 分配空间
// 定义对象---指针 Person *per;
// 分配空间 [Person alloc]
// [对象 方法] 给对象发送‘方法’消息
#pragma mark Person
Person *per = [ Person alloc];
// 初始化
per=[per init];
// 利用箭头访问类的实例变量
// OC里面的字符串可以直接赋值
// per->_name = @"xiaohua";
// 受保护和私有在外部不可以访问