【学习ios之路:Object-C】设置器,访问器,自定义初始化和多参赋值

1.设置器和访问器的定义

 *   给单一实例变量赋值的方法叫做设置器.(setter方法)
 *   给单一实例变量值的方法叫做访问器.(getter方法)

2.为什么用设置器(setter)和访问器(getter)

* 实例变量的可见度有:

1).private:只有在本类文件中访问.即.h和.m文件,,访问方式:直接访问.

2).protected:在本类文件和子类文件中访问.访问方式:直接访问.

3).public: 在本类文件和子类文件及其它文件都可以访问. 访问方式:在本类及子类是直接访问,在其它文件:对象(实例访问)

 * 系统默认的实例变量可见度是@protected.

 *   1.为什么不默认@public?
 *    @public或造成实例变量公开的,在任何地方都可以访问,不安全,违背了封装(方便别人,为难自己)的思想.
 *   2.为什么不默认@private?
 *    @private会造成父类的实例变量子类不可以访问,违背了继承(子类继承以及可以访问从父类继承的内容)的思想.

3.settter与getter命名规范

 
 *  setter方法命名规范
 *  :减号方法 无返回值 ,以set开头 +实例变量名首字母大写,有一个参数,参数的类型与实例变量名相同,参数名与实例变量名相同.
 *  getter方法命名规范
    :减号方法 无返回值.返回值类型和实例变量类型相同,方法名和实例变量名相同,无参数.
 *

例如:Person.h文件


@interface Person : NSObject
{
    NSString *_name;
    NSString *_sex;
}
 //setter和getter
- (void)setSex:(NSString *)sex;
- (NSString *)sex;

- (void)setName:(NSString *)name;
- (NSString *)name;

@end

2).实现getter和setter方法: Person.m文件,

@implementation Person
- (void)setName:(NSString *)name {
    _name = name;
}

- (NSString *)name {
    return _name;
}

- (void)setSex:(NSString *)sex {
    _sex = sex;
}
- (NSString *)sex {
    return _sex;
}

@end

3).访问实例变量

    
  {
        Person *person = [[Person alloc] init];
        [person setName:@"asd"];
    
        NSString *name1 = [person name];
        NSLog(@"%@", name1);
    }


4.对象自定义初始化

 自定义初始化 :如果想再对象初始化时赋一些有意义的初值,则需要自定义初始化方法

例:1).声明

  //给Person对象,进行初始化赋值
- (id)initWithName:(NSString *)name sex:(NSString *)sex;


2).自定义初始化方法实现.

//初始化操作还是赋值操作,只不过该过程在初始化阶段.
- (id)initWithName:(NSString *)name sex:(NSString *)sex {
     self = [super init];
       if (self != nil) {
          _name = name;
          _sex = sex;
         } 
     return self;//在减号方法中代表调用该方法的对象.
}

5.多参赋值.

例子:1)声明

- (void)setName:(NSString *)name sex:(NSString *)sex;
 
2).实现

//多参赋值实现
- (void)setName:(NSString *)name sex:(NSString *)sex {
    _name = name;
    _sex = sex;
}

6.自定义初始化和多参赋值的区别
    1.时机不同:初始化方法是在初始化阶段,赋值方法是在对象创建完之后

    2.调用次数不同:初始化一个方法生命周期内只能调用一次,赋值方法调用多次.
    3.作用不同:初始化是赋值,赋值是改值.
 初始化:

      对象开辟空间之后立即做赋值操作,此过程叫初始化,一个对象的空间开辟只有一次,所有初始化过程也只有一次.


注: #pragma mark - +号方法  //(编译指示:pragma)当函数方法过多时,可以清晰查询加减号方法

技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。