zoukankan      html  css  js  c++  java
  • Objective-C基础8 : 类扩展(class extension)

    封装的特性就是暴露公共接口给外边调用,C++通过public定义公共方法提供给外面调用,protected和private定义的方法只能在类里面使用,外面不能调用,若外面调用,编译器直接报错,对于变量也同理。OC里面类扩展类似protected和private的作用。

    1.类扩展是一种特殊的类别,在定义的时候不需要加名字。下面代码定义了类Things的扩展。

    @interface Things ()

    {

        NSInteger thing4;

    }

    @end

    2.类扩展作用

    1)可以把暴露给外面的可读属性改为读写方便类内部修改。

    在.h文件里面声明thing2为只读属性,这样外面就不可以改变thing2的值。

    @interface Things : NSObject
    
    @property (readonly, assign) NSInteger thing2;
    
    - (void)resetAllValues;
    
    @end
    

     在.m里面resetAllValues方法实现中可以改变thing2为300.

    @interface Things ()
    
    {
    
        NSInteger thing4;
    
    }
    
    @property (readwrite, assign) NSInteger thing2;
    
    @end
    
    @implementation Things
    
    @synthesize thing2;
    
    - (void)resetAllValues
    
    {
    
        self.thing2 = 300;
    
        thing4 = 5;
    
    }
    

    2)可以添加任意私有实例变量。比如上面的例子Things扩展添加了NSInteger thing4;这个实例变量只能在Things内部访问,外部无法访问到,因此是私有的。

    3)可以任意添加私有属性。你可以在Things扩展中添加@property (assign) NSInteger thing3;

    4)你可以添加私有方法。如下代码在Things扩展中声明了方法disInfo方法并在Things实现了它,在resetAllValues调用了disInfo

    @interface Things ()
    {
        NSInteger thing4;
    }
    @property (readwrite, assign) NSInteger thing2;
    @property (assign) NSInteger thing3;
    - (void) disInfo;
    @end
    
    @implementation Things
    @synthesize thing2;
    @synthesize thing3;
    
    - (void) disInfo
    {
        NSLog(@"disInfo");
    }
    
    - (void)resetAllValues
    {
        [self disInfo];
        self.thing1 = 200;
        self.thing2 = 300;
        self.thing3 = 400;
        thing4 = 5;
    }
    
  • 相关阅读:
    未来简史之数据主义(Dataism)
    10分钟看懂《人类简史》和《未来简史》
    SignalR来做实时Web聊天
    .Net Core应用搭建的分布式邮件系统设计
    AspNetCore-MVC实战系列(四)之结尾
    AspNetCore-MVC实战系列(三)之个人中心
    AspNetCore-MVC实战系列(二)之通过绑定邮箱找回密码
    AspNetCore
    爱留图
    .NetCore上传多文件的几种示例
  • 原文地址:https://www.cnblogs.com/52xpz/p/4266592.html
Copyright © 2011-2022 走看看