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

时间:2015-06-01 12:32:40

标签: objective-c function class methods properties

当一个属性类(让他们称之为class_X)从另一个类实例化时,所有class_X的方法和函数也包含在每个实例中。< / p>

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

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

Q2: 将它作为参数传递给C风格的函数(让它称之为function_C)可以安全地存放在同一个类中(function_C驻留在class_X)?

提前致谢。

更新:以下是一些代码来说明:

class_X标题:

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

1 个答案:

答案 0 :(得分:2)

要有一些命名约定:“类实例”类似于含糊不清。有

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

因此,当您编写“类实例”时,我假设您要使用“类X的实例对象”。

致你的问:

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

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