代码之家  ›  专栏  ›  技术社区  ›  CiscoIPPhone

目的-C恰当使用自动释放酶?

  •  1
  • CiscoIPPhone  · 技术社区  · 14 年前

    我在学习Objective-C,我想写一个Vector3D课程。

    Vector3D
    {
      Vector3D crossProduct(Vector3D in)
      {
        Vector3D result;
        result = ...  // maths involving this classes variables and the input Vectors variables.
        return result; 
      }
    }
    

    在objective-c中,我不能返回一个对象,只能返回一个对象指针。这是一个合适的地方使用自动释放(返回前?)。这将使我能够链接Vector3D类上的方法(因为许多方法返回对象本身),但是与手动分配和释放对象相比,这会特别低效吗?在objective-c中是否有其他常用的模式用于返回对象?

    我想对类执行的操作示例:

    Vector3D * vector3D1 = [[Vector3D alloc] init];
    Vector3D * vector3D2 = [[Vector3D alloc] init];
    Vector3D * vector3D3 = [vector3D1 cross [ [vector3D2 normalize ] multiply 1.43f]];
    

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   imaginaryboy    14 年前

    是的,这正是 autorelease 事实上,大多数使用你的代码的人都会这样想 cross normalize ,和 multiply 返回自动释放的对象。

        2
  •  1
  •   hooleyhoop    14 年前

    静态分析仪会警告你如果你没有做到这一点,确保你已经打开了它。

    你不应该向我学习内存管理规则,你应该向苹果学习内存管理规则。 http://developer.apple.com/library/mac/ipad/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html%23//apple_ref/doc/uid/20000994-BAJHFBGH

    Cocoa没有2dpoint类,相反,它经常使用C结构(NSPoint或CGPoint),可能是因为效率低下。一部分是因为苹果的例子,另一部分是因为担心效率低下,你不会经常看到3dVector类。更常见的情况是,你会看到一个C结构有4个浮点数。这也可能是因为它对OpenGL或OpenCL更有用。

    简单地说,你说“在objective-c中,我不能返回一个对象,只能返回一个对象指针”。这与java和C++完全一样,这不是你在Objtovi-C中做不同的原因。