将 class 实例作为参数传递给它自己的函数之一

Passing a class instance as a parameter to one of its own functions

当 class 属性 (我们称之为 class_X) 从另一个 class 实例化时,所有 class_X的方法和函数也包含在每个实例中。

Q1: 这不会增加大量开销,特别是如果有多个 class 实例吗?

class 实例 (class_X) 然后可以作为参数传递给其他 class 中的其他方法和函数。

Q2: 将它作为参数传递给 C-style 函数(我们称它为 function_C)是否安全驻留在同一个 class(function_C 驻留在 class_X)?

提前致谢。

更新:这里有一些代码来说明:

class_X header:

    //class_X.h

    @interface class_X : NSObject

    @property (nonatomic, assign) NSInteger intProp;
    @property (nonatomic, strong) NSArray *arrProp;

    void function_C (class_X *cx);

    @end

class_X 实施:

    //class_X.m

    #import "class_X.h"

    @implementation class_X

    void function_C (class_X *cx)
    {
        //code...
    }

    @end  

实例化class_X:

    @implementation someOtherViewController

    - (void) viewDidLoad {
        [super viewDidLoad];

        class_X *cx = [[class_X alloc] init];

        cx.intProp = 123;
        cx.arrProp = @[@"one", @"two", @"three"];

        function_C (cx);   //does this not cause some sort of recursion?
    }

    @end

要有一些命名约定:"class instances" 有点模棱两可。有

  • 实例(或实例对象)具有 class.
  • classes,类似于实例对象的类型。
  • class 个对象

所以我假设你想用"instance objects of class X",当你写"class instances"。

给你的问题:

  1. 不,没有开销。 Objective-C 是一种基于 class 的编程语言,与基于原型的 JS 不同。这导致每个实例都具有由 class 声明为实例方法的所有实例方法。因此,对于所有实例,它们仅存储一次。这些方法的内存占用量不取决于创建的实例数。这是一次性的。 (属性的内存占用量在很大程度上取决于实例数。)

  2. 将对实例的引用传递给函数是完全安全的。此外,函数可以在任何地方定义。当然,它必须查看传递实例的 class f 的接口,可能是通过导入。