iOS技术文章

OC:封装(二)☀️

2016-06-23  本文已影响31人  LeaderBiao
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。
1.锁定头文件的方法
1. 打开终端
2. 进入到Xcode的目录, 命令:   cd /Applications/Xcode.app
3. 把系统头文件修改为只读, 命令:   sudo chown -hR root:wheel Contentss
4. 好处:防止误删,误改头文件!```


###2、封装

>封装的目的:就是为了达到高内聚低耦合;
   内聚:模块内部各部分之间的关联程度;
   耦合:模块与模块之间的关联程度;
   内聚和耦合有一个条件改变,必然会导致另一个条件改变(耦合低了,内聚必然增高)
-  (eg:甲乙城市的例子):

//Person.h
@interface Person : NSObject
//实例变量
{
//实例变量可见度修饰的实例变量范围:从书写的哪一行开始,到下一个修饰符结束,或者碰到大括号结束;
@public
NSString *_name;
@protected//被protected被保护的, 修饰的实例变量只能在内部和子类中直接访问。直接就是通过实例变量名来访问
NSInteger _age;
NSString *_sex;
@private //私有的,被private 修饰的实例变量 只能在类的内部直接访问 子类中也不可以访问
NSString *_clour;}
//被protected修饰的实例变量不能在类的外边访问,这时需要给这些实例变量增加赋值的方法
//设置器 set 方法
//设置器的书写格式
1>对象方法 以 - 号开头
2>返回值类型一定是void
3>方法名一定以set 开头,后面跟上实例变量去掉下划线并且首字母大写
4>一定有参数,并且参数类型要和实例变量的类型保持一致,参数名就是实例变量去掉下划线
//age 的setter 方法

3、 总结三种实例变量的可见度

系统默认的实例变量可见度修饰符:@protected

@public 修饰的实例变量虽然可以在类的内部直接访问,但是它破坏了类的封装思想,所以以后祥哥建议不要使用

4、点语法:

1》点语法后面有赋值运算符(=)的时候调用的是实例变量的 setter 方法,后面没有赋值运算符(=)的时候用的是实例变量的getter 方法;

2》点语法知识系统提供一种快速调用setter 和getter 方法的快捷方式,只有写了实例变量的 settergetter 方法才能使用点语法;

//Student.h
@interface Student : NSObject
//实例变量
{
    NSString *_name;//名字
    NSString *_sex;//性别
    NSString *_clour;//肤色
    NSInteger _age;//年龄
    CGFloat _weight;//体重   可以设置只写的
//    @private
    NSInteger _number;//学号  可以设置只读的
}
//重写父类的init方法
- (id)init;
//由于学号不允许学生修改,此时值提供getter 方法
- (NSInteger)number;
//由于体重是学生的密码,此时只提供setter方法
- (void)setWeight:(CGFloat)weight;
Student.m
//由于学号不允许学生修改,此时值提供getter 方法
- (NSInteger)number
{
    return _number;
}
//由于体重是学生的密码,此时只提供setter方法
- (void)setWeight:(CGFloat)weight
{
    _weight =weight;
}
//main.m
 NSLog(@"%ld ",stu.number); 
    stu.weight =  50.0;

5、类方法: 类方法的好处和使用场合:不依赖于对象,执行效率高,能使用类方法解决的问题尽量使用类方法;

//场合:当方法内不需要使用实际变量的时候,可以改为类方法;
//Calculator.h
@interface Calculator : NSObject
//计算两个数的和
+ (CGFloat)oneNumber : (CGFloat)number plusOtherNumber : (CGFloat)OtherNumber;
//计算两个数的和
- (CGFloat)oneNumber : (CGFloat)number plusOtherNumber : (CGFloat)OtherNumber;
@end
//Calculator.m
@implementation Calculator
//计算两个数的和
+ (CGFloat)oneNumber : (CGFloat)number plusOtherNumber : (CGFloat)OtherNumber{
    return number +OtherNumber;
}
//计算两个数的和
- (CGFloat)oneNumber : (CGFloat)number plusOtherNumber : (CGFloat)OtherNumber{
    return number +OtherNumber;
}
@end
//main.m
//调用计算器类的方法
   CGFloat result = [Calculator oneNumber:34.0 plusOtherNumber:56.0];
    NSLog(@"%.2lf",result);
    //调用计算器的对象方法
    Calculator *cal = [[Calculator alloc]init];
    result = [cal oneNumber:50.0 plusOtherNumber:50.0];
    NSLog(@"%.2lf",result);```


###6、自定义初始化条件 


######好处:把初始化和对实例变量的赋值结合在一起

//Boy.h
@interface Boy : NSObject
{ NSString *_name;//名字
NSString *_gender;//性别
NSInteger _age;//年龄
CGFloat _height;//身高}
//重写隐匿的方法

//Boy.m
@implementation Boy

上一篇 下一篇

猜你喜欢

热点阅读