加入属性、便利构造器的类的初始化

#import <Foundation/Foundation.h>

@interface Person : NSObject


//属性也可以设置自己的属性,在@property后会有些可选属性

//1.原子属性

// nonatomic 非原子性,不保证多线程安全.

// atomic 原子性,多线程访问时安全.默认.

//2.setter语义属性

// assign 直接赋值 适用于基本数据类型.

// retain 赋值时做内存优化,适用于对象类型.

// copy 复制一个副本,适用于特殊的对象类型.

//3.读写属性

// readwrite 可读写(既有设置器也有访问器)默认.

// readonly 只读(只有访问器).

// getter = 方法名 指定访问器的方法名.

// setter = 方法名 指定设置器的方法名.


@property (nonatomic, getter=qvmingzi, setter=gaimingzi:)NSString *name;
@property (nonatomic, retain)NSString *sex;
@property (nonatomic, retain)NSString *hobby;
@property (nonatomic, assign)NSInteger age;

//实例(-)函数 .          初始化类成员.        我们将在便利构造器中用到这个函数.
- (instancetype)initWithName:(NSString *)name sex:(NSString *)sex hobby:(NSString *)hobby age:(NSInteger)age;

//类(+)函数.              便利构造器.  
+ (instancetype)PersonWithName:(NSString *)name sex:(NSString *)sex hobby:(NSString *)hobby age:(NSInteger)age;


@end






#import "Person.h"
@implementation Person


// 自定义初始化方法实现

- (instancetype)initWithName:(NSString *)name sex:(NSString *)sex hobby:(NSString *)hobby age:(NSInteger)age
{
    self = [super init];
    if (self) {
        [self gaimingzi:name];        //注意这里的方法名

        [self setSex:sex];                //注意方法名    编译器自动生成 getter/setter方法

        [self setHobby:hobby];       //这里也可以写成  self.hobby = hobby;    //self点的    //hobby 代表设置器setter 

        [self setAge:age];
    }
    return self;
}

// 便利构造器实现

+ (instancetype)PersonWithName:(NSString *)name sex:(NSString *)sex hobby:(NSString *)hobby age:(NSInteger)age
{
    Person *p = [[Person alloc] initWithName:name sex:sex hobby:hobby age:age];
    return p;
}

//对象输出格式化方法  疑问.  直接输入"de", 编译器会提示完整函数

- (NSString *)description
{
    return [NSString stringWithFormat:@"|name: %@| sex : %@| hobby : %@ |age: %ld|", [self name],[self sex],[self hobby], [self age]];
}


#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {

//利用便利构造器 手动初始化对象
    Person *p = [Person PersonWithName:@"lilei" sex:@"male" hobby:@"sleep" age:24];

//利用属性更改对象的变量值

    [p gaimingzi:@"Anni"];

//利用属性输出更改后的变量值

    NSLog(@"%@", [p qvmingzi]);

//对象格式化输出    测试  这里也可以写成 NSLog(@"%@", [p description]);    效果是一样的

    NSLog(@"%@", p );

    return 0;
}










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值