我有以下问题,因为我刚开始编码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 *'
提前致谢。
答案 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
,_second
和tmp
的值已经是指针,所以“&tmp
”是一个指向指针的指针 - 一个“间接指针” (对编译器作者的部分没有特别明确的措辞)。
解决方案是不要说&tmp
。你只想在这里tmp
。