1.类中实例变量的可见度
实例变量可见度
@public公共的,在类的内部外部都可以进行实例变量的访问(破坏了封装特性)
@private私有的 ,只有在当前的类的内部才能够直接访问,在类的外部及其子类都不可以进行访问(破坏了继承特性)
@protected 受保护的,只有当前类及其子类才能进行访问(默认可见度)
比如:
@interface Person : NSObject
{
@public
NSString *_name;
NSString *_sex;
@private
unsignedint _age;
CGFloat _weight;
@protected
NSString *_hobby;
}
2.类的初始化:
-(id)init;
自定义初始化方法(指定初始化方法)
指定初始化方法: init开头 + With + 参数描述 : +各个参数 以及参数类型
指定初始化方法 : 不管执行哪一个初始化方法,一定会执行的初始化方法称之为指定初始化方法
-(id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(unsignedint)age
weight:(CGFloat)weight
hobby:(NSString *)hobby;
-(id)initWithName:(NSString *)name
sex :(NSString *)sex
age:(unsignedint)age;
-(id)initWithName:(NSString *)name
hobby:(NSString *)hobby;
3.方法的书写形式
1. + / - 标识作用"-"代表实例方法"+"代表类方法
2. 返回值类型需要使用"()"
3. 参数描述+":" + 参数以及参数类型
4. 方法名 :去掉+ -号 ,去掉返回值类型 去掉参数类型以及参数,剩余的就是方法名下面的方法名是(setName:sex:age:weight:hobby);
- (void)setName:(NSString *)name sex:(NSString *)sex age:(unsignedint)age weight:(CGFloat) weight hobby:(NSString *)hobby;
因为我们不清楚 用户到底需要那几个实例变量赋值索性为每一个实例变量设置一个赋值方法(setter方法)
setter 方法的书写形式
-(void) + set开头 +对应实例变量 去掉"_"首字母大写 + ":"参数类型及参数 (例如name的setter -(void)setName:(NSString)name)
-(void)setName:(NSString *)name;
-(void)setSex:(NSString *)sex;
-(void)setAge:(unsignedint)age;
-(void)setWeight:(CGFloat)weight;
-(void)setHobby:(NSString *)hobby;
getter 方法的书写形式
-(对应实例变量的数据类型) +对应实例变量去掉 "_" (例如name的getter方法 -(NSString *)name;)
-(NSString *)name;
-(NSString *)sex;
-(unsignedint )age;
-(CGFloat)weight;
-(NSString *)hobby;
实现
@implementation Person
//初始化方法
-(id)init
{
_name =@"小明";
_sex =@"男";
_hobby =@"打篮球";
_age =20;
_weight =50.0;
returnself;
}
-(id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(unsignedint)age
weight:(CGFloat)weight
hobby:(NSString *)hobby
{
self = [superinit];
if (self) {
_name =name;
_age = age;
_sex = sex;
_weight = weight;
_hobby = hobby;
}
returnself;
}
//
-(id)initWithName:(NSString *)name
sex :(NSString *)sex
age:(unsignedint)age
{
return [selfinitWithName:name sex:sexage:age weight:0hobby:nil];
}
//
-(id)initWithName:(NSString *)name
hobby:(NSString *)hobby
{
return [selfinitWithName:name sex:nilage:0weight:0hobby:hobby];
}
- (void)setName:(NSString *)name sex:(NSString *)sex age:(unsignedint)age weight:(CGFloat) weight hobby:(NSString *)hobby
{
_name = name;
_sex = sex;
_age = age;
_weight = weight;
_hobby = hobby;
}
-(void)setWeight:(CGFloat)weight hobby:(NSString *)hobby
{
_weight = weight;
_hobby = hobby;
}
-(void)setName:(NSString *)name
{
_name = name;
}
-(void)setSex:(NSString *)sex
{
_sex = sex;
}
-(void)setAge:(unsignedint)age
{
_age = age;
}
-(void)setWeight:(CGFloat)weight
{
_weight = weight;
}
-(void)setHobby:(NSString *)hobby
{
_hobby = hobby;
}
-(NSString *)name
{
return_name;
}
-(NSString *)sex
{
return_sex;
}
-(unsignedint )age
{
return_age;
}
-(CGFloat)weight
{
return_weight;
}
-(NSString *)hobby
{
return_hobby;
}
调用:
//创建Person对象
Person *p1 = [[Personalloc] init];
[p1 sayHi];
//操作实例变量
p1->_name =@"小刚";
[p1 setName:@"小刚"sex:@"男"age:23weight:60.5hobby:@"吃喝"];
//setter方法操作实例变量
[p1 setName:@"小刚"];
[p1 setSex:@"男"];
[p1 setAge:24];
[p1 setWeight:56.0];
[p1 setHobby:@"女"];
NSLog(@"姓名%@性别%@ 爱好%@",[p1name],[p1 sex],[p1hobby]);
//点语法既可以调用setter 又可以调用getter可以通过=位置作为判断
p1.name =@"小亮";
p1.weight =54.0;//等价于 [p1 setWeight:100]
NSLog(@"体重 %.2f",p1.weight);//==[p1 weight];