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

Objective c 将类实例作为参数传递给它自己的函数之一,objective-c,function,class,methods,properties,Objective C,Function,Class,Methods,Properties,当从另一个类实例化一个属性类(我们称之为class_X)时,所有class_X的方法和函数也包含在每个实例中 Q1:这会不会增加大量的开销,特别是如果该类有多个实例的话 然后可以将类实例(class_X)作为参数传递给其他类中的其他方法和函数 Q2:将其作为参数传递给驻留在同一类(函数C驻留在类X中)中的C风格函数(我们称之为函数C)安全吗 提前谢谢 更新:这里有一些代码可以说明: 类_X头: 类_X实现: 实例化类_X: 要有一些命名约定,“类实例”类似于含糊不清。有 具有类的实例(或实例对

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

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

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

Q2:将其作为参数传递给驻留在同一类(函数C驻留在类X中)中的C风格函数(我们称之为函数C)安全吗

提前谢谢

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

类_X头:

类_X实现:

实例化类_X:


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

  • 具有类的实例(或实例对象)
  • 类,类似于实例对象的类型
  • 类对象
因此,我假设您在编写“类实例”时希望使用“类X的实例对象”

对你的问题:

  • 不,没有开销。Objective-C是一种基于类的编程语言,而JS是基于原型的。其结果是,每个实例都有被类声明为实例方法的所有实例方法。因此,对于所有实例,它们只存储一次。这些方法的内存占用不取决于创建的实例数。这是一个计时器。(属性的内存占用很大程度上取决于实例的数量。)

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


  • 非常感谢你的回答。因此,对于每个实例,方法不会重复,但属性是;我不知道。另外,您提到该函数可以在任何地方;即使是在同一个班级?(请看我更新的代码示例)属性是否比常规变量重很多?再次感谢你。它可以在同一个类内、不同的类或类外。即
    NSLog()
    是一个C函数,不在任何类中。2.每个实例变量都具有与本地变量或全局变量相同的内存占用,通常是一个机器字(8字节)。因此,您可以通过以下公式计算circa值:每个实例的属性数×实例数×8字节=内存占用。太好了!请给我最后一个。当它所在的类被另一个类实例化时,C风格的函数是否真的不包括在内?在我上面的例子中,即使它被放在类@implementation/@end中,
    function\u C()
    也不会是对象的一部分?不,它们不包括在内:没有理由包括该函数,因为您可以简单地将其与
    function\u C()
    一起使用,而不需要与类建立任何关系。即使函数是在类内声明的,它们也与类或其实例没有关系。
        //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.m
    
        #import "class_X.h"
    
        @implementation class_X
    
        void function_C (class_X *cx)
        {
            //code...
        }
    
        @end  
    
        @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