Fer*_*yan -2 delegates objective-c ios
我是Objective-c的新手.我正在学习目标-c.你能不能让我知道这段代码是如何工作的,你是否愿意帮助理解代表们在objective-c中的工作流程
SampleProtocol.h
#import <Foundation/Foundation.h>
@protocol SampleProtocolDelegate <NSObject>
@required
- (void) processCompleted;
@end
@interface SampleProtocol : NSObject
{
id <SampleProtocolDelegate> _delegate;
}
@property (nonatomic,strong) id delegate;
-(void)startSampleProcess;
@end
Run Code Online (Sandbox Code Playgroud)
在我添加SampleProtocol.m下面的代码后
#import "SampleProtocol.h"
@implementation SampleProtocol
-(void)startSampleProcess{
[NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate
selector:@selector(processCompleted) userInfo:nil repeats:NO];
}
@end
Run Code Online (Sandbox Code Playgroud)
IBOutlet为标签创建一个并将其命名为myLabel并更新代码,如下所示采用SampleProtocolDelegateViewController.h
#import <UIKit/UIKit.h>
#import "SampleProtocol.h"
@interface ViewController : UIViewController<SampleProtocolDelegate>
{
IBOutlet UILabel *myLabel;
}
@end
Run Code Online (Sandbox Code Playgroud)
和更新的ViewController.m文件如下
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
SampleProtocol *sampleProtocol = [[SampleProtocol alloc]init];
sampleProtocol.delegate = self;
[myLabel setText:@"Processing..."];
[sampleProtocol startSampleProcess];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
#pragma mark - Sample protocol delegate
-(void)processCompleted{
[myLabel setText:@"Process Completed"];
}
@end
Run Code Online (Sandbox Code Playgroud)
小智 5
首先,我要指出,当您用于@property声明属性时,不需要使用下划线前缀创建单独的实例变量.您可以使用self.delegate它来访问此属性,它也会自动_delegate为您创建.因为_delegate已经使用@property你创建了可以取出重复声明.
其次,您可以移动<SampleProtocolDelegate>到属性声明,您还应该将其设置为弱以避免保留周期.请参阅:为什么使用弱指针进行委派?.所以你的界面最终看起来像这样:
@interface SampleProtocol : NSObject
@property (nonatomic, weak) id <SampleProtocolDelegate> delegate;
-(void)startSampleProcess;
@end
Run Code Online (Sandbox Code Playgroud)
通过<SampleProtocolDelegate>在'id'和'delegate'之间放置,只有符合SampleProtocolDelegate的对象才能将自己设置为对象的委托(这意味着:任何符合此协议的对象).并且SampleProtocol对象可以安全地假设它可以在其委托上调用协议方法.
| 归档时间: |
|
| 查看次数: |
11500 次 |
| 最近记录: |