完整的自定义初始化方法 & 便利构造器 & 属性

老师分步讲了两天后发布一个爆炸性消息,前几天讲的基本上不会再用,只是对概念有一个了解..........so,零散的不做整理,直接上完整版


注: 初学者,若有理解不当之处,还请多指教


一  : 完整的自定义初始化方法

1 声明

- (id)initWithName:(NSString *)name

                      Age:(NSInteger)age;

// With 中的W一定要大写


2 实现

- (id)initWithName:(NSString *)name

                      Age:(NSInteger)age{

                self = [super  init];

                if(self){

                       _name = name;

                       _age = age;

               }

                   return  self;

        }



二 :   便利构造器

1 . 声明      // 注意前面使用+号 , 以类名开头,必须小写,With中W大写

+ (id)studentWithName:(NSStrint  *)name

                              Age:(NSInteger )age;


2 . 实现

+ (id)studentWithName:(NSStrint  *)name

                              Age:(NSInteger )age{


                   Student  *stu = [[Student   alloc]   initWithName:name  Age:age ];

                   return   stu;

}


3 . 主函数调用

Student   *stu  = [Student  studentWithName:@"张三" , Age:23];

NSLog(@"%@,%ld",stu.name,stu.age);


三 : 赋值取值

1 . 设置器赋值取值

赋值  :  [student  setName:@"李四"];

取值:    NSLog(@"%@",[student   name]);


2 . 点语法赋值取值

赋值  :  student.name = @"王五";

取值  :  NSLog(@"%@",student.name);



四  : 属性

1 . 属性的标志 : @property

2 . 属性的作用 : 

(1) 定义了一个成员变量,成员变量的命名是:   _ + 属性名

(2) 声明了setter 和 getter 方法

(3) 实现了setter 和 getter 方法

3 . 属性的属性 : 

(1)  读写性设置: 就是对设置器和访问器进行控制,默认是可读可写 : readwrite

                          readonly : 只读,被它修饰的属性只有getter方法,没有setter方法

      1). @property( readonly , getter = arr)NSString *str;   // getter = method 相当于给getter方法重新命名

      2). @property( setter = lin : )NSString *str1;    // 当设置 setter 的时候,别忘了新的名字后加上冒号 : 

(2) 原子性设置:

    nonatomic  ,  atomic   

     默认是 atomic 可以保证在多线程的情况下,访问数据,安全性.但我们一般只是普通的赋值,打开线程锁反而浪费资源,所以一般选择使用nonatomic.

          @property( nonatomic )NSString  *hobby;

(3) . 语义设置:

       1). assign : 一般基本数据类型使用assign, 比如NSInteger,CGFloat等,这部分内容不需要管理内存

       2). retain  :一般的对象类型,比如我们自己定义的类,系统提供的数组等对象,都需要通过retain进行修饰

       3).copy  : 目前只有NSString使用copy

             @property(nonatomic,copy)NSString   *color;

             @property(nonatomic,retain)Student   *stu;

             @property(nonatomic,assign)NSInteger  age;

 


五  : 一个完整的方法定义实现和调用    // 以 Phone 为例

1 . 声明(.h文件下)


//  定义成员变量

@property(nonatomic,copy)NSString  *brand;

@property(nonatomic,assign)NSInteger   price;

@property(nonatomic,assign)CGFloat   screen;


// 自定义初始化

- (id)initWithBrand:(NSString  *)brand

                     Price :(NSInteger)price

                    Screen:(CGFloat)screen;


// 便利构造器

+ (id)initWithBrand:(NSString  *)brand

                     Price :(NSInteger)price

                    Screen:(CGFloat)screen;


 2 . 实现

// 自定义初始化

- (id)initWithBrand:(NSString  *)brand

                     Price :(NSInteger)price

                    Screen:(CGFloat)screen{

            self  =  [ super  self ];

            if ( self ){

                 _brand  = brand;

                 _price  = price;

                 _screen = screen;

           } 

             return   self;


// 便利构造器

+ (id)initWithBrand:(NSString  *)brand

                     Price :(NSInteger)price

                    Screen:(CGFloat)screen{

     

             Phone  *phone  = [ [ Phone  alloc ]  initWithBrand :brand  Price: price  Screen:screen ];

             return    phone;     

}


3 . 主函数实现

         Phone  *phone  = [ Phone  phoneWithBrand:@"三星"  Price:4200  Screen:5.7];

         NSLog(@"%@,%ld,%g",phone.brand,phone.price,phone.screen);

         

       // setter赋值取值

        [phone  setBrand:@"苹果"];

        NSLog(@"%@",[phone  brand]);

       

        // 点语法  赋值取值

        phone.price  =  4300;

        NSLog(@"%ld",phone.price);        







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值