首页 > 代码库 > 【学习ios之路:Object-C】设置器,访问器,自定义初始化和多参赋值
【学习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; @end2).实现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; } @end3).访问实例变量
{ 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)当函数方法过多时,可以清晰查询加减号方法
【学习ios之路:Object-C】设置器,访问器,自定义初始化和多参赋值