IOS:在另一个类中调用一个方法
我有一个类“ClassA”与“MethodA”,我也有一个“ClassB”,我想从“ClassB”调用“methodA”; 我写
@classA; @property(nonatomic, retain) ClassA *classA; //and also @synthesize...
然后我打电话给方法
[self.classA method];
但它不会调用方法….然后我写在classB中的viewdidload
self.classA = [[ClassA alloc]init];
但是这个东西重置了ClassA中的variables。
我怎样才能解决这种情况?
编辑:我决定重写我的答案,因为我不认为原文措辞良好。
我认为你不明白什么是Objective-C 2.0点符号。 这是令人困惑的,特别是如果你用C或C ++编程,因为它在语法上等同于struct
字段或class
variables访问操作符,但在语义上是不同的。
当你使用:
self.classA = newClassA;
你实际上是这样做的:
[self setClassA: newClassA];
而当@property classA
用retain
属性定义时,编译器会生成setter方法,如下所示:
- (void) setClassA:(ClassA *)newClassA { if (classA != newClassA) { [newClassA retain]; [classA release]; classA = newClassA; } }
在你给的代码中:
[self.classA method];
其实扩展到:
[self setClassA: method];
这不是你想要的。
避免这种混淆的最简单的方法是根本不使用点符号,特别是不在处理variables的分配或取消分配的同一类的实例方法中。
您正在使用alloc和init创build一个ClassA的新实例。 您需要将属性设置为您现有的classA实例,很难build议如何没有更多的上下文,但也许当您创build类b时,
classB.classA = self;
这假定A类首先创buildB类。