我正在itunesU(来自斯坦福大学)参加IOS开发课程 我对在这个讲座中创建的类的属性产生了很大的疑问。让我用一些代码解释一下:
我有类“faceView”,其任务是绘制一个面,该类的一个属性是“委托”,这是一个必须实现FaceViewDelegate的对象。
这是接口的代码:
#import <UIKit/UIKit.h>
@class FaceView;
@protocol FaceViewDelegate
-(float)smileForFaceView:(FaceView *)requestor;
@end
@interface FaceView : UIView {
id <FaceViewDelegate> delegate;
CGFloat scale;
}
@property CGFloat scale;
@property (assign) id <FaceViewDelegate> delegate;
@end
我无法理解为什么委托不是指向对象的指针,而是直接指向对象。 有人可以告诉我更多有关此实施选择的信息吗?它是否正确 ?为什么? 非常感谢!
答案 0 :(得分:2)
它是指向对象的指针。类型id
已经是指针。因此,当您声明类型为id
的变量时,它们不需要是指针。因此,这些语句基本相同(意味着您可以以完全相同的方式使用myIDObj和myObj):
// myIDObj and myObj are both pointers to objects
id myIDObj = [[NSObject alloc] init];
NSObject* myObj = [[NSObject alloc] init];
答案 1 :(得分:2)
delegate
是指向对象的指针。 id
类型定义为:
typedef struct objc_object {
Class isa;
} *id;
所以它已经是一个指针。