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)当函数方法过多时,可以清晰查询加减号方法