2013-10-10 36 views
0

的正确方法我有三个类A类B类C类委派的同名

A类声明一个协议如下

@protocol calculate <NSObject> 

@required 
-(void)addNumbers; 
-(void)calculateTotal; 

@end 

在用于A类执行我有一个定义的属性为这样。

static id <calculate> delegate; 

]乙 C类已在实现的协议和方法在它们的限定。

在A类实现文件中,如果我想调用由B类和C类实现正确的协议的方法我在做以下

id <calculate> delegate = [Class B alloc] init]; 
[delegate addNumbers]; 

id <calculate> delgate = [Class C alloc] init]; 
[delegate addNumbers]; 

即使这个工作,我有一种感觉,这是不对。我想知道,如果它能够由单一的委托对象,以确定并调用B类或C类的正确的addNumbers

+0

我从来没有见过一个静态委托。 – vikingosegundo

+1

对于C类,你的意思是'[anotherDelegate addNumbers];'?是复制粘贴错误还是? – Unheilig

+0

btw:你正在调用delegate和anotherDelegate属性。但他们不是。 – vikingosegundo

回答

1

我建议把协议放到它自己的文件中。然后A类输入该文件并声明支持它“@interface Class_A:NSObject(同时请大写”C“)

通常,委托将是一个预先存在的对象。它用于新对象,因为协议的整体思想是能够向现有对象发送消息而不必知道它的全部内容

因此,当您创建B和C时,您将它们的委托属性(使用__weak 。)一些退出的对象,一个符合协议的这些新的对象可以那么对象消息

因此,假设你是一个计算器,你想一个委托处理计算精细 - 。在说了UIView控制器,创建这个对象,可以做到这一点,并保持强烈的参考。随着您创建需要委托进行计算的按钮,您可以使用之前创建的此对象设置其委托属性。

0

你为什么分配B类和C类中A.

在A级它应该调用委托方法[self.delegate addNumbers] 并且不应该引用正在实现它的类。

类B和C应各自具有它们自己执行-(void)addNumbers;

ClassC.m - (无效)的addNumbers { C = A + B; }

ClassB.m - (void)addNumbers {c = a + b + d + 1; }

+0

我可以要求澄清一下这背后的原因。你的情况可能值得实施。由于需要调用两个同时实现的协议似乎很奇怪。 –

+1

@Unheilig我有一些Java知识。一般来说,我对编程仍然很陌生 –

0

检查委托的类。

[[delegate class] isKindOfClass:[B class]]