zoukankan      html  css  js  c++  java
  • 关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol

    关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol

    1.category,覆盖原类的方法,即使不引用该category头文件,也能覆盖,respondsToSelector:方法也能响应。
    2.category,不可以有私有变量,但是可以有@property的声明,property的声明只是声明了该类的set,get方法(需要引用该category的头文件),但是category实现的m文件里面根本就没有生成这两个方法,所以你使用self.xxx时,会挂掉,错误提示:没有get/set方法。
    你在category的m文件里面@synthesize 也无法声明,
    也就是说,有声明,无实现。
    3.category的静态方法,可以使用,
    即使不声明,而是直接去实现,
    调用的时候(无需引用category的h文件)虽然会有警告,但依然会执行。
    调用的时候,只能用类名,用对象的话,会挂掉。


    关于协议@Protocol
    协议不能实例化,所以不能有实例变量(或者叫私有变量),但是可以有@property声明,这个声明,只是告诉别人这个协议里面有set,get方法而已。
    注意:尽量不要在@Protocol用@property声明,很容易出毛病,特别是输出属性时。
    如果要使用@property的话,可以参考 UITextInputTraits,这个官方协议里面都是@property

    协议时可以有静态函数的。这个和java里面的接口有点冲突,接口时不可以有静态函数的。
    协议里面不能定义static常量,定义时没错,一旦引用该文件,但编译报错


    非正式协议就时一个分类,category,用于根类的category。
    例如@interface NSObject (类别名称)
    但是在object-2.0中,已经用@optional代替了非正式协议
  • 相关阅读:
    AE开发中实现Control中的各种图形工具的方法(转)
    ArcEngine打开本地数据库
    【ArcMap】
    【ArcCatalog】
    go guid 和uuid生成
    go select 的default
    go select 使得一个 goroutine 在多个通讯操作上等待。
    go channel
    go goroutine
    go io.Reader 接口
  • 原文地址:https://www.cnblogs.com/iOS-mt/p/4115560.html
Copyright © 2011-2022 走看看