0

我是 Objective-c 和 iOS 开发的新手,在我的课堂上我声明了委托协议。

我发现了几个这样做的例子,它们看起来都非常相似,但有一些区别,我想自己弄清楚并理解。

示例 1:

(链接 - https://stackoverflow.com/a/12660523/2117550https://github.com/alexfish/delegate-example/blob/master/DelegateExample/CustomClass.h

我的类.h

#import <BlaClass/BlaClass.h>

@class MyClass; // removed in example 2
@protocol MyClassDelegate <NSObject>
@optional
- (void) myClassDelegateMethod:(BOOL)value;
@end

@interface MyClass : NSObject
@property (nonatomic, weak) id <MyClassDelegate> delegate;
@end

我的班级.m

#import "MyClass.h"

@implementation MyClass 
@synthesize delegate; // removed in example 2

- (void) myMethodToDoStuff {
  [self.delegate myClassDelegateMethod:YES]; 
}

@end

示例 2:( 链接 - http://www.tutorialspoint.com/ios/ios_delegates.htm

实际上除了这两个不同之外是相同的..

与他们不同的事情:

  • 例1中我们@class在protocol之前声明,真的有必要吗?或者只是最佳实践。如果没有此声明,第二个示例可以正常工作。
  • 在示例 1 中@synthesize delegate,据我了解,我们使用它为属性创建 getter/setter,但我们真的需要它吗?第二个例子没有这个。

这两个例子都很好,我只是想消除我心中的困惑。

谢谢!

4

2 回答 2

3

@class MyClass如果协议方法具有对类的引用,则需要使用。协议方法通常为类提供参数。您在示例中没有这样做,因此不需要。

@synthesize有一段时间不需要使用了。除非您有特定的理由使用它,否则不要使用它。

于 2014-05-18T15:35:23.660 回答
1

@class告诉编译器一个类在到达它的@interface. 当两个类/协议标头只能#import相互关联时,它很有用。一旦您创建了您的协议​​,就可能会出现这种情况。

@synthesize 以前需要创建 getter 和 setter,但现在我们也有了所谓的自动属性。当您不使用@synthesize时,编译器将创建一个实例变量来保存属性值,并且无论如何都会生成 getter 和 setter。@synthesize使您可以稍微控制该过程,但不再需要。

于 2014-05-18T15:34:37.620 回答