zoukankan      html  css  js  c++  java
  • Objective C 总结(五):扩展现有类

    类别类似于C#中的扩展方法,是对现在类进行行为的扩展,它不能进行数据扩展,也就是不能定义字段和属性;

    定义:

    #import "XYZPerson.h"
     
    @interface XYZPerson (XYZPersonNameDisplayAdditions)
    - (NSString *)lastNameFirstNameString;
    @end

    实现:

    #import "XYZPerson+XYZPersonNameDisplayAdditions.h"
     
    @implementation XYZPerson (XYZPersonNameDisplayAdditions)
    - (NSString *)lastNameFirstNameString {
        return [NSString stringWithFormat:@"%@, %@", self.lastName, self.firstName];
    }
    @end

    然后可以像实例方法一样使用

    类别的局限

    1. 无法扩展数据
    2. 与原类方法名称冲突,类别具有更高的优先级

    类别的作用

    1. 将类的实现分散到多个文件及多个框架中
    2. 创建对私有方法的前向引用,(非正式协议,现在基本都用正式协议了)
      objective-c中没有真正的私有方法,只要知道某个对象有某个方法,就可以向这个对象发送这个消息。
      一般定义私有方法的方法是:在@implementation中实现在@interface中未声明的方法,但这样编译器会发出警告或错误,这个时候,我们可以定义一个私类别,在类别中声明这个方法,这样编译器就不会发出警告了。
      #import "FirstClass.h"
      #import "FirstClass+Extended.h"
      
      @implementation FirstClass
      - (void) privateMethod
      {
          NSLog("Private Method");
      }
      @end
  • 相关阅读:
    cogs 896. 圈奶牛
    bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘
    bzoj 1007: [HNOI2008]水平可见直线
    bzoj 3673: 可持久化并查集 by zky
    bzoj 3545: [ONTAK2010]Peaks
    bzoj 1901: Zju2112 Dynamic Rankings
    动态 K th
    poj 2104 K-th Number
    bzoj 3657 斐波那契数列(fib.cpp/pas/c/in/out)
    青蛙的约会
  • 原文地址:https://www.cnblogs.com/iprogrammer/p/3246017.html
Copyright © 2011-2022 走看看