#import <Foundation/Foundation.h>
//声明一个类
@interface Person : NSObject
{
NSString *_name;
NSInteger _age;
}
//init方法
- (id)init;
//setter方法
- (void)setName:(NSString *)name;
- (void)setAge:(NSInteger)age;
- (void)setName:(NSString *)name andAge:(NSInteger)age;
//getter方法
- (NSString *)name;
- (NSInteger)age;
//print方法
- (void)print;
//类方法
+ (void)testPerson;
@end
//实现一个类
//ctrl+alt+ 上下键:快速切换.h .m文件
@implementation Person
- (id)init
{
self = [super init];//super是调用父类方法的关键字
if(self)//判断父类的构造方法是否初始化成功
{
_name = @"小飞";
_age = 12;
}
return self;
}
- (void)setName:(NSString *)name
{
_name = name;
}
- (void)setAge:(NSInteger)age
{
_age = age;
}
//同时修改_name 及 _age实例变量的值
- (void)setName:(NSString *)name andAge:(NSInteger)age
{
//实例变量的访问方式
//1、直接访问,在类里面可以直接访问实例变量
_name = name;
_age = age;
//2、间接访问:通过方法的调用来访问实例变量
//self指针:代表自己
[self setName:name];
[self setAge:age];
//3、通过self指针直接访问
self->_name = name;
self->_age = age;
}
//getter方法
- (NSString *)name
{
return _name;
}
- (NSInteger)age
{
return _age;
}
//打印方法
- (void)print
{
//间接访问实例变量
NSLog(@"name = %@, age = %li", _name, _age);
NSLog(@"name = %@, age = %li", [self name], [self age]);
}
//类方法 测试当前类是否可用
+ (void)testPerson
{
Person *per = [Person alloc];//alloc创建一个对象
//创建一个对象后,一定要先初始化
per = [per init];
[per print];
/*
name = 小飞, age = 12
*/
//对于一个对象只能初始化一次
Person *per1 = [[Person alloc] init];
//对象指针:保存对象的内存地址,通过对象的内存地址访问对象。对象指针通常在栈中。
//对象:是alloc方法开辟的一块内存,通常开辟在堆当中
//* :表示对对象的引用。也可以理解为C语言的指针说明符
[per1 setName:@"小华" andAge:20];
[per1 print];
}
@end
//c语言与OC语言区别
//1、在c语言中包含头文件用#include。OC包含头文件用#import
//2、c语言中为了防止头文件重复包含,需要用预编译器指令#infine XXX.h #define XXX.h #endif
//在OC语言中不需要预编译指令,不需要考虑重复包含
//3、C语言函数实现文件以.c结束 OC语言类的实现文件用.m结束
//4、OC语言完全兼容c语言
//分文件创建一个类
int main(int argc, const char * argv[]) {
@autoreleasepool {
[Person testPerson];
}
return 0;
}