如何在iOS中使用id对象参数调用方法?
我创建了一个协议和一个添加类的方法。但当我想通过此方法添加类时,我有一个错误: arc不允许将objective-c指针隐式转换为“\u自动释放id*”如何在iOS中使用id对象参数调用方法?,ios,objective-c,Ios,Objective C,我创建了一个协议和一个添加类的方法。但当我想通过此方法添加类时,我有一个错误: arc不允许将objective-c指针隐式转换为“\u自动释放id*” self.homeViewController = [[HomeViewController alloc] init]; [DataController addProgressListener:self.homeViewController]; MyProtocol类 - (void) addProgressListener:(id
self.homeViewController = [[HomeViewController alloc] init];
[DataController addProgressListener:self.homeViewController];
MyProtocol类
- (void) addProgressListener:(id*)idbProgressListener {
if(self.progressListeners == nil)
self.progressListeners = [NSMutableArray<IDBProgressListener> alloc];
[self.progressListeners addObject:*idbProgressListener];
}
-(void)addProgressListener:(id*)idbProgressListener{
if(self.progressListeners==nil)
self.progressListeners=[NSMutableArray alloc];
[self.progressListeners addObject:*idbProgressListener];
}
对于id,您不必使用*。id内部有一个分配给自身的指针。您不需要显式地传递它。删除协议类中方法中的指针id
而不是*id
,告诉我发生了什么事Jaycee的意思是id
本质上是(void*)
的类型定义,这意味着它已经是指针类型了。编写id*
就是定义指向指针的指针,这不是您想要的。它可以工作。但它给了我这样的错误:[DataController addProgressListener:]:发送到类的无法识别的选择器不是真正的void*,而是非常类似于NSObject*(它不完全相同,但在大多数情况下足够接近)。DataController不是一个实例,它是一个类。有一个实例方法addProgressListener:,但没有类方法(无论如何都没有多大意义)。是的,当然。我错过了这个。谢谢。:)