zoukankan      html  css  js  c++  java
  • Objective-C类目延展协议

    注:小编在技术上还是有很大的纰漏,发表此博客希望各位有路过的大牛人物给予评论,给于指正,小编在此非常感谢!此文章为小编自己做的笔记,有不当之处望请指出,小编很是感谢,若用于一些抄袭的勾当,出现一些不可挽回的问题,小编在此声明不负任何责任;

    一、类目:(Category)

    是在原有类的基础之上添加方法,在使用的时候只需要用原有类实例化出来的对象即可;

    实际开发中什么情况下使用类目?

             已经封装好的类,(不希望再改变原有类)

             团队里面分工开发一个模块的时候可以使用自己定义的方法;

    二、延展:(Extension)的基本概念和用法;

    在xcode4.3之前直接使用self 调用方法  那时候会报错,所以的用延展

    就是在类中添加私有方法,延展中声明的方法在类的本身的@interface  类名()和它对应的@end之间实现;

    类有时需要方法只有自己所见,我们可以通过延展类的方式定义类的私有方法;

    三、协议:Protocol

    协议就是共同遵守的一个条约,只有一个声明文件;

    协议时可以被任何类实现的方法,协议本身不是类,他是定义了一个其他类可实现的接口;

    协议是 只声明  不实现

    没有实现的类目 又叫做 非正式协议

    因为一般情况下类都从NSObject的类目中所声明的方法,这个类可以实现也可以不实现;

    非正式协议是以圆括号表示,而正是协议是以<>来表示;

    如果子类要创建协议时,只要在基类遵守某一协议就行;

    在哪一个类里面导入了协议,就要在哪一个类里面 实现这个协议的方法,

    NSObject的类目中所列出的方法表示可能希望要实现的方法,如果使用可能更好的完成工作;

    注:

    @required 必须 强制实现    不实现    就报错;

    @optional  选择实现的

    实例:

    BOOL n = [xueSheng respondsToSelector:@selector(night)];

            if (n!=NO) {

                NSLog(@"糟了,没有打卡!");

                [xueSheng night];

            }

            else

            {

                NSLog(@"还好!");

            }

    解释:

    1、respondsToSelector://判断能不能响应一个方法;

    2、@selector方法选择器  是 用来选择方法的

    3、判断后是一个bool类型的,所以需要一个bool来接收;

    4、if对协议进行确定是否有协议;

  • 相关阅读:
    (OK) VirtualBox 5.0.10 中 Fedora 23 在安装了增强工具后无法自动调节虚拟机分辨率的问题
    (OK) install-fedora23—gnome classic—dnf—gdm—multi-user—graphical
    (OK) fedora23——add “opening terminal” in the menu of right click
    (OK) Install Docker on Fedora 23
    (OK) 运行cBPM in Fedora23
    错误:‘bOS::SQL::SQLCommand::SQLOperation’既不是类也不是命名空间
    My enum is not a class or namespace
    【t049】&&【u001】足球
    【u002】数列排序(seqsort)
    【u003】计算概率
  • 原文地址:https://www.cnblogs.com/iOS-mainstay/p/4600860.html
Copyright © 2011-2022 走看看