iOS中代理的使用

1.創(chuàng)建代理協(xié)議
2.在要傳值的類中創(chuàng)建一個(gè)該代理的屬性

//1
#import <Foundation/Foundation.h>

@protocol Delegate<NSObject>
- (void)number1:(NSInteger)number1 AddNumber2:(NSInteger)number2;
@end

//2
#import <UIKit/UIKit.h>
@interface SecondViewController : UIViewController

@property (nonatomic,weak) id<Delegate> delegate;

@end
  1. 在需要接收值和實(shí)現(xiàn)該協(xié)議的類中遵從代理協(xié)議
#import "ViewController.h"
#import "SecondViewController.h"

//3-1 遵從代理協(xié)議
@interface ViewController ()<Delegate>

@end

@implementation ViewController
 
 - (void)present{
    SecondViewController *secondVC = [[SecondViewController   alloc] init];
    secondVC.delegate = self; //3-2 設(shè)置當(dāng)前對(duì)象為該代理
    [self presentViewController:secondVC animated:YES completion:nil];
}

//3-3  使用傳入的值 實(shí)現(xiàn)代理協(xié)議方法
- (void)number1:(NSInteger)number1 AddNumber2:(NSInteger)number2
{
NSLog(@"The result = %ld",number1 + number2);
}
  1. 設(shè)置并調(diào)用代理協(xié)議方法
#import "SecondViewController.h"
@interface SecondViewController ()
@end

@implementation SecondViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   //4 調(diào)用代理方法
    [self.delegate number1:2 AddNumber2:5];

}

需要注意的是代理的修飾詞:
若用strong:該對(duì)象強(qiáng)引用delegate,外界不能銷毀delegate對(duì)象,會(huì)導(dǎo)致循環(huán)引用。

若用assing:采用assign修飾代理時(shí),是指針賦值,沒有引用計(jì)數(shù)操作,當(dāng)頁(yè)面銷毀時(shí)這個(gè)對(duì)應(yīng)的代理地址并沒置為nil,從而導(dǎo)致成為了一個(gè)野指針,然后在調(diào)用方法時(shí)便會(huì)產(chǎn)生崩潰;而weak不會(huì)產(chǎn)生野指針。

若用weak:指明該對(duì)象并不負(fù)責(zé)保持delegate這個(gè)對(duì)象,delegate這個(gè)對(duì)象的銷毀由外部控制。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容