我有一个带有“MethodA”的班级“ClassA”,我还有一个“ClassB”,我想从“ClassB”中调用“methodA”;我写了
@classA;
@property(nonatomic, retain) ClassA *classA;
//and also @synthesize...
然后我用
调用方法[self.classA method];
但它不调用方法....然后我在classB
中的viewdidload中写self.classA = [[ClassA alloc]init];
但这件事重置了ClassA中的变种。
我该如何解决这种情况?
答案 0 :(得分:2)
我认为您无法理解Objective-C 2.0点符号的作用。这很令人困惑,特别是如果你用C或C ++编程,因为它在语法上等同于struct
字段或class
变量访问运算符,但在语义上不同。
使用时:
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];
这不是你想要的。
避免这种混淆的最简单方法是根本不使用点表示法,尤其是不在处理变量分配或释放的同一类的实例方法中。
答案 1 :(得分:1)
您正在使用alloc和init创建ClassA的新实例。你需要将属性设置为你现有的classA实例,如果没有更多的上下文,很难建议如何,但也许你在创建类b时,做
classB.classA = self;
这假设A类首先创建了B类。