IOS:在另一个类中调用一个方法

时间:2011-10-07 14:14:40

标签: objective-c ios xcode class

我有一个带有“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中的变种。

我该如何解决这种情况?

2 个答案:

答案 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类。