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

在Objective-C中交换指针的函数

  •  0
  • Pablo  · 技术社区  · 15 年前
    - (void) swapController:(MyViewController*)controller1 
                             with:(MyViewController*)controller2
    {
        MyViewController *swap = controller2;
        controller2 = controller1;
        controller1 = swap;
    }
    

    看来这样不行,因为我没有传递推荐信。怎么做呢?

    2 回复  |  直到 15 年前
        1
  •  7
  •   Hugh    15 年前

    您可以通过将指针传入要更改的指针来完成此操作:

    - (void)swapController:(MyViewController**)controller1 with:(MyViewController**)controller2
    {
        MyViewController* swap = *controller2;
        *controller2 = *controller1;
        *controller1 = swap;
    }
    
        2
  •  4
  •   Miles Alden    12 年前

    在这里,我不是想把这个作为一个相反的答案,而是想补充@Huw的答案。

    实施his swapController:with: 在上面的方法中,我注意到了一些关于弧和原语的问题。如果你路过一个 强id* 到一个 身份证* 自动释放id

    如果您和我一样,那么,总有一天您会在objc中来回交换指针,其中一个值将是原始数据类型。

    你最终会做这样的事情,这里有一个小助手(就像我之前说的)来补充上面的答案:

     void swapObjcPointerWithC ( void** ptrA, void** ptrB ) {
    
         void *temp = *ptrA;
         *ptrA = *ptrB;
         *ptrB = temp;
    
     }
    
     ...
     // Later on
    
     id objA;
     int anInt = 10;
     swapObjcPointerWithC ( (void*)&objA, (void*)&anInt );
    

    给你。我的两分钱。 注:

    推荐文章