交换指向对象的两个变量的值

时间:2012-11-24 14:57:50

标签: objective-c cocoa pointers

我有以下问题,因为我刚开始编码objective-c。

我有一些

的实例
@interface MyClass
    @property (strong) MySecondClass *first;
    @property (strong) MySecondClass *second;
@end

@implementation MyClass
    @synthesize first = _first;
    @synthesize second = _second;

    /*this is called while initialisation*/
    -(void) initialisation{
        _first = [[MySecondClass alloc] init];
        _second = [[MySecondClass alloc] init];
     }

    /*what i want to do*/
    -(void) swap{
        // second one should be replaced with first one
        _second = _first; 

        // first pointer should be replaced by new instance
        _first = [[MySecondClass alloc] init];
    }

@end

问题是,当我调用swap方法时,_first仍然指向旧对象,所以_second将被相同的新对象替换。

我已经尝试过像copy这样的副本,但它会引发异常。

 _second = [_first copy];

PS:我正在使用ARC

修改

我真正想要实现的目标是:

 _second = _first
 MySecondClass *tmp = [[MySecondClass alloc] init];
 _first = &tmp;

但是这显示了编译器错误:ARC不允许将指向Objective-C指针的间接指针隐式转换为'MySecondClass *'

提前致谢。

2 个答案:

答案 0 :(得分:0)

我的新答案:

您还应确保您尝试复制的课程实施"NSCopying" protocol。例如,UIViewController doesn't implement it因此它不响应对“复制”或“copyWithZone”的调用。

尝试以与使用“copy”不同的方式重置该指针。

我原来的回答:

尝试通过其访问者引用属性。

e.g:

self.second = self.first;

self.first = [[MySecondClass alloc] init];

您必须使用“_second”& “_first”直接在类init方法中。

答案 1 :(得分:-1)

  

我真正想要实现的目标是:

_second = _first
MySecondClass *tmp = [[MySecondClass alloc] init];
_first = &tmp;
     

但是这显示了编译器错误:ARC不允许将指向Objective-C指针的间接指针隐式转换为'MySecondClass *'

那是因为_first_secondtmp的值已经是指针,所以“&tmp”是一个指向指针的指针 - 一个“间接指针” (对编译器作者的部分没有特别明确的措辞)。

解决方案是不要说&tmp。你只想在这里tmp