gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:29:49 30 4
gpt4 key购买 nike

我对 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/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com