ios - 类扩展 vs 主接口(interface) vs 类别

标签 ios objective-c

我对 iOS 领域相当陌生。来自 Java 和 Android 背景,我在学习 Objective-C 时面临一些挑战。

我的问题:我了解上述三个之间的不同之处,但我无法理解它们在实践中的用例。

我们是否需要为每个具有私有(private)函数的类进行类扩展? Category 有什么用,什么时候我们可以在 interface 中扩展一个 Cocoa/Cocoa-touch 类并添加自定义功能?请根据您的经验提供一些示例。

最佳答案

  • 分类 是一种将单个类定义拆分为多个文件的方法。可以为任何类声明一个类别,即使您没有原始实现源代码。在运行时,一个类别添加的方法与一个类别添加的方法没有区别这是由原始类实现的。

  • 类别示例:
         NSString+UrlString.h
         #import <UIKit/UIKit.h>
         @interface NSString(Additions)
    
         +(void)urlMethod;
         @end 
    
          NSString+UrlString.m//implmentation
          #import "NSString+Additions.h"
    
          @implementation NSString (Additions)
    
          +(void)urlMethod
          {
          }
    
          @end
    
  • 主界面 for 一个类用于定义其他类与它交互的方式。换句话说,它是类的公共(public)接口(interface)。
  • 类扩展 通常用于使用额外的私有(private)方法或属性扩展公共(public)接口(interface),以便在类本身的实现中使用。

    类扩展用于在 Objective-C 中声明私有(private)方法

    例如,在接口(interface)中将属性定义为只读,但在实现上面声明的类扩展中定义为读写,以便类的内部方法可以直接更改属性值。

    类扩展声明的方法是在原始类的实现 block 中实现的,所以你不能在框架类上声明类扩展,比如像 NSString 这样的 Cocoa 或 Cocoa Touch 类。

    声明扩展的语法使用 @interface 关键字,就像标准的 Objective-C
    @interface ClassName ()
    
    @end
    

    您可能会发现您希望通过添加仅在某些情况下有用的行为来扩展现有类。 Please refer this
  • 关于ios - 类扩展 vs 主接口(interface) vs 类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31718620/

    相关文章:

    ios - UIButton 大小与 xib 中设置的不一样

    ios - 如何在 iOS sdk 的本地资源 txt 文件中 append 字符串

    iOS UITableView resize height/cant scroll down 问题

    objective-c - 无法将文件保存到磁盘,不知道为什么

    iphone - 如何从UIAlertView运行方法

    iphone - 在 iOS 上使用 Phonegap 将图像转换为 Base64 字符串

    ios - 如何从 UIPickerView 获取选定的值

    ios - 自定义推送 segue 上的 Sigabrt 错误

    WWDC 2012 的 ios iPaint

    iphone - 像 Sudz 一样从 JSON 转换为 Objective C