欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解iOS 實現(xiàn)一對多代理方案

 更新時間:2022年01月21日 10:04:35   作者:執(zhí)筆續(xù)春秋  
本文主要介紹了iOS 實現(xiàn)一對多代理方案,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

實現(xiàn)方案一

利用可變數(shù)組。 簽協(xié)議方需要add到代理的數(shù)組中, 然后協(xié)議遍歷數(shù)組中的對象,進行分發(fā)。
缺點是需要數(shù)組對其內部元素是強引用, 需要在合適的地方對其進行釋放,否則會有內存泄漏

代理協(xié)議的對象.h寫法

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@protocol TestSubViewDelegate <NSObject>

- (void)testSendSomeMessageToOther:(NSString *)somethings;

- (void)testSendSome:(NSString *)somethings;

@end


@interface TestSubView : UIView

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

@property (nonatomic, strong)NSMutableArray <id<TestSubViewDelegate>>* __nullable delegates;

- (void)addDelegate:(id<TestSubViewDelegate>)delegate;

// 需要在合適的地方銷毀對象。
- (void)destory;
@end

NS_ASSUME_NONNULL_END

.m代理協(xié)議分發(fā)機制

#import "TestSubView.h"

@interface TestSubView ()

@end

@implementation TestSubView

- (instancetype)init {
? ? if (self = [super init]) {
? ? ? ? self.delegates = [NSMutableArray array];
? ? ? ??
? ? ? ? // 測試,執(zhí)行
? ? ? ? dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
? ? ? ? ? ? [self test1DelegateAction];
? ? ? ? });
? ? ? ??
? ? ? ? dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
? ? ? ? ? ? [self test2DelegateAction];
? ? ? ? });
? ? ? ??
? ? }
? ? return self;
}

// 測試代理方法分發(fā)1
- (void)test1DelegateAction {
? ? [self.delegates enumerateObjectsUsingBlock:^(id<TestSubViewDelegate> ?_Nonnull delegate, NSUInteger idx, BOOL * _Nonnull stop) {
? ? ? ? if ([delegate respondsToSelector:@selector(testSendSomeMessageToOther:)]) {
? ? ? ? ? ? [delegate testSendSomeMessageToOther:@"傳遞的Some"];
? ? ? ? }
? ? }];
}

// 測試代理分發(fā)2
- (void)test2DelegateAction {
? ? [self.delegates enumerateObjectsUsingBlock:^(id<TestSubViewDelegate> ?_Nonnull delegate, NSUInteger idx, BOOL * _Nonnull stop) {
? ? ? ? if ([delegate respondsToSelector:@selector(testSendSome:)]) {
? ? ? ? ? ? [delegate testSendSome:@"傳遞的Some2-"];
? ? ? ? }
? ? }];
}


- (void)destory {
? ? [self.delegates removeAllObjects];
? ? self.delegates = nil;
}

- (void)addDelegate:(id<TestSubViewDelegate>)delegate {
? ? [self.delegates addObject:delegate];
}

簽訂代理方1

#import "View1Controller.h"
#import "TestSubView.h"

@interface View1Controller ()<TestSubViewDelegate>

@end

@implementation View1Controller

- (void)viewDidLoad {
? ? [super viewDidLoad];
? ? TestSubView *ts = [TestSubView new];
? ? [ts addDelegate:self];
? ? [self.view addSubview:ts];
}

#pragma mark - TestSubViewDelegate
- (void)testSendSomeMessageToOther:(NSString *)somethings {
? ? NSLog(@"%@", somethings);
}

- (void)testSendSome:(NSString *)somethings {
? ? NSLog(@"%@", somethings);
}
?
@end

簽訂方2

#import "ViewController.h"
#import "View1Controller.h"
#import "TestSubView.h"

@interface ViewController ()<TestSubViewDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
? ? [super viewDidLoad];
? ? TestSubView *ts = [TestSubView new];
? ? [ts addDelegate:self];
? ? [self.view addSubview:ts];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
? ? View1Controller *vc = [View1Controller new];
? ? [self presentViewController:vc animated:YES completion:nil];
}

#pragma mark - TestSubViewDelegate
- (void)testSendSomeMessageToOther:(NSString *)somethings {
? ? NSLog(@"%@", somethings);
}

@end

實現(xiàn)方案二

采用NSPointerArray去聲明delegates的數(shù)組,這樣就可以不用操心管理內存泄漏的問題, 因為NSPointerArray里面的元素都是weak化的。 會隨著當前對象釋放而釋放掉。

還有一些NSHashTable NSMapTable 等等, 實現(xiàn)方式大同小異。

到此這篇關于詳解iOS 實現(xiàn)一對多代理方案的文章就介紹到這了,更多相關iOS 一對多代理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • IOS實現(xiàn)視頻動畫效果的啟動圖

    IOS實現(xiàn)視頻動畫效果的啟動圖

    這篇文章實現(xiàn)的是一個關于啟動頁或者引導頁的視頻動畫效果的實現(xiàn)過程,對于大家開發(fā)APP具有一定的參考借鑒價值,有需要的可以來看看。
    2016-09-09
  • h5 ios輸入框和鍵盤的兼容性優(yōu)化指南

    h5 ios輸入框和鍵盤的兼容性優(yōu)化指南

    這篇文章主要給大家介紹了關于h5 ios輸入框和鍵盤的兼容性優(yōu)化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • 詳解IOS判斷當前網(wǎng)絡狀態(tài)的三種方法

    詳解IOS判斷當前網(wǎng)絡狀態(tài)的三種方法

    這篇文章主要介紹了詳解IOS判斷當前網(wǎng)絡狀態(tài)的三種方法,網(wǎng)絡狀態(tài)是非常重要的知識,感興趣的同學,必須要看一下
    2021-04-04
  • iOS 和 Android 哪個更利于賺錢?

    iOS 和 Android 哪個更利于賺錢?

    iOS 和 Android 哪個更利于賺錢?這篇文章為大家揭曉答案,感興趣的小伙伴們可以參考一下
    2016-09-09
  • iOS實現(xiàn)動態(tài)自適應標簽

    iOS實現(xiàn)動態(tài)自適應標簽

    這篇文章主要為大家詳細介紹了iOS動態(tài)自適應標簽的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 詳解iOS項目基本框架搭建

    詳解iOS項目基本框架搭建

    本篇文章給讀者們詳細分析了iOS項目基本框架搭建的過程的注意點,對此有需要的朋友學習參考下。
    2018-02-02
  • IOS程序開發(fā)之跳轉短信發(fā)送界面實現(xiàn)發(fā)送短信功能

    IOS程序開發(fā)之跳轉短信發(fā)送界面實現(xiàn)發(fā)送短信功能

    在程序開發(fā)中,我們經(jīng)常遇到這樣一功能:某個程序里面發(fā)送一些短信驗證,那么基于代碼是如何實現(xiàn)的呢?下面小編通過本文給大家介紹IOS程序開發(fā)之跳轉短信發(fā)送界面實現(xiàn)發(fā)送短信功能,有需要的朋友拿去用
    2016-01-01
  • iOS自學筆記之XIB的使用教程

    iOS自學筆記之XIB的使用教程

    本篇文章主要介紹了iOS自學筆記之XIB的使用教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 深入講解iOS開發(fā)中應用數(shù)據(jù)的存儲方式

    深入講解iOS開發(fā)中應用數(shù)據(jù)的存儲方式

    這篇文章主要介紹了iOS開發(fā)中應用數(shù)據(jù)的存儲方式,包括plistXML屬性列表和NSKeydeArchiver歸檔兩個部分,需要的朋友可以參考下
    2015-12-12
  • iOS獲取手機ip地址代碼

    iOS獲取手機ip地址代碼

    這篇文章主要為大家詳細介紹了iOS獲取手機終端ip地址的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評論