- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我试图在我的代码中使用尽可能少的内存。我尝试了两种将自定义类对象发送到方法的方法。我不确定这两种方法之间是否有任何区别。假设我有 2 个类,Class1 和 Class2,当然每个类都有自己的类变量和方法。
所有代码都写在Class1
方法一:
Class2 *class2Object = [[Class2 alloc] init];
[self doSomething: class2Object];
[class2Object release];
-(void) doSomething: (Class2 *) var {
int a = var.a;
}
方法 2:
Class2 *class2Object = [[Class2 alloc] init];
[self doSomething: &class2Object];
[class2Object release];
-(void) doSomething: (Class2 **) var {
int a = var->a;
}
这两种方法在性能上有什么区别吗?第二种方法完全没有意义吗?为什么我可以在方法 1 中使用点符号,但在方法 2 中必须使用 ->?
谢谢。
最佳答案
Is there any performance difference between these two methods?
确实,性能上的差异可以忽略不计,因为在方法 2 中您还有一个间接寻址(即指针解引用,另请参见下文);因此,方法 1 将为您节省几个时钟周期。
Is the second approach completely pointless?
方法 2 很有用,例如,当您想要分配一个 Class2 类型的新实例并通过相同的参数将其传回给调用者时;说:
- (bool)cloneObject:(Class2 **)var;
你传入一个对象;该对象被克隆并在 var 中返回;因为改变的是对象本身的地址,所以您需要有一个指向对象指针的指针才能设置新地址;返回值仅说明操作是否正确执行。
当然,在这个例子中,这样做会更自然:
- (Class2)cloneObject:(Class2*)var;
即,您返回指向新分配的对象的指针,但用例仍然成立。
Why is it that I can use the dot notation in Approach 1, but have to use -> in Approach 2?
在第二种情况下,您必须使用 ->
,因为您不是直接处理指向对象的指针;您正在处理指向对象指针的指针;在这种情况下你需要做的是,首先,“取消引用”你的指针(即应用运算符*)以获得指向对象的指针,然后像其他方式一样访问后者;这可以这样写:
(*var).a
这里,var
是一个指向Class2
对象的指针; *var
是取消引用它的结果,所以你有一个指向 Class2
对象的指针;最后,.a
是访问对象属性的语法。语法:
var->a
只是上述操作的“简写”。
关于objective-c - Objective C 中点符号和 -> 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8126309/
我需要你的帮助!我在它们之间放置了随机数量的 div。 Item description Item description Item description Item
我有两个 NSDates,时间格式为“h:mm a”(即 6:00 AM 和 8:00 PM)。 我试图找出这两个时间之间的中点是什么时间。 对于上面的示例,早上 6:00 和晚上 8:00 之间的中
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我正在寻找一种有效的算法来检查一个点是否在 3D 中的另一个点附近。 sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2) < radius 这似乎并不太快,实际上我不需要这
我可以让 pandas cut/qcut 函数返回 bin 端点或 bin 中点而不是一串 bin 标签吗? 目前 pd.cut(pd.Series(np.arange(11)), bins = 5)
我是一名优秀的程序员,十分优秀!