属性与指针之间的差异而不是在objective-c中

时间:2010-11-13 17:59:00

标签: objective-c ios

我正在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

我无法理解为什么委托不是指向对象的指针,而是直接指向对象。 有人可以告诉我更多有关此实施选择的信息吗?它是否正确 ?为什么? 非常感谢!

2 个答案:

答案 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;

所以它已经是一个指针。