新建 Person 类:
Person.h文件:
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
// 实例变量可见度
// 默认是 @protected 受保护的 只能其本类和子类去使用 (一般使用)
// @public 公开的 可以在类的外部进行使用
// @private 私有的 只能是本类进行使用(基本不用)
NSString *_name;
NSString *_sex;
NSString *_age;
}
// 方法名:initWithName:Sex:Age:
-(instancetype)initWithName:(NSString *)name
Sex:(NSString *)sex
Age:(NSString *)age;
+ (void)sayHi;
// 需求: 编写方法,取出实例变量name的值
- (NSString *)name;
// 需求:编写方法 更改实例变量name的值
- (void)setName:(NSString *)name;
- (void)setSex:(NSString *)sex;
- (NSString *)sex;
- (void)setAge:(NSString *)age;
- (NSString *)age;
- (void)setName:(NSString *)name Sex:(NSString *)sex;
- (NSString *)description;
Person.m文件:
#import "Person.h"
@implementation Person
// 方法名
// 首先把 方法类型删掉 再删返回值类型 还删参数类型及参数名 删完 就是这个方法的方法名
// 注意:冒号是标识 有参数 不能删掉
-(instancetype)initWithName:(NSString *)name
Sex:(NSString *)sex
Age:(NSString *)age
{
_name = name;
_sex = sex;
_age = age;
return self;
}
// 声明一个类方法
// 类方法直接使用类名调用 这时是没有对象创建出来 实例变量是依托于对象而存在
// 对象都没有 就不能使用实例变量
// 注: 类方法中 不能直接使用实例变量
- (void)setName:(NSString *)name
{
_name = name;
}
- (NSString *)name
{
return _name;
}
- (void)setSex:(NSString *)sex
{
_sex = sex;
}
- (NSString *)sex
{
return _sex;
}
- (void)setAge:(NSString *)age
{
_age = age;
}
- (NSString *)age
{
return _age;
}
- (void)setName:(NSString *)name Sex:(NSString *)sex
{
_name = name;
_sex = sex;
}
// 直接用%@ 打印对象的时候
// 实际上是调用 父类中方法名为description的方法
// 如果想按自己的意愿输出信息的话 需要重写父类的方法
- (NSString *)description
{
// 格式化拼接字符串
NSString *str = [NSString stringWithFormat:@"姓名:%@ 性别:%@ 年龄:%@", _name, _sex, _age];
return str;
}
+ (void)sayHi
{
// NSLog(@"我是Person的类方法");
// NSLog(@"%@", _name);
}
@end
main.m文件:
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
Person *p = [[Person alloc]initWithName:@"dj" Sex:@"女" Age:@"22"];
// 取出实例变量 并接收
NSString *name = [p name];
NSLog(@"%@",name);
// p->_name = @"dj";
// [Person sayHi];
// 修改 实例变量name
[p setName:@"d"];
NSLog(@"%@",[p name]);
NSLog(@"%@", p);
return 0;
}