【发布时间】:2014-06-01 16:40:13
【问题描述】:
我有以下课程(从 Apple 示例中挑选):
@interface LeTemperatureAlarmService : NSObject <CBPeripheralDelegate>
@property (readonly) CBPeripheral *servicePeripheral;
@end
在另一个类的方法中,我使用以下代码:
NSMutableArray *connectedServices = [[NSMutableArray alloc] init];
... // Adding some myService objects to connectedServices
for (id service in connectedServices) {
if ([service servicePeripheral] == parameter) {
...
}
}
现在让我抓狂的是我可以将servicePeripheral 发送到service 的部分。
据我了解id 的工作原理,它基本上是一个指针,可以从字面上指向任何对象。我的NSMutableArray 是一个无类型数组,可以在其中保存任何类型的对象,甚至是混合的,所以我不必小心我放入的内容。
即使我从未指定服务类型,我怎么能使用[service servicePeripheral]? Xcode 是如何知道这一点,甚至在代码完成中建议该方法的?
【问题讨论】:
标签: objective-c types type-safety message-passing