最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

實(shí)現(xiàn)方案一

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

代理協(xié)議的對(duì)象.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;

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

NS_ASSUME_NONNULL_END

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

#import "TestSubView.h"

@interface TestSubView ()

@end

@implementation TestSubView

- (instancetype)init {
? ? if (self = [super init]) {
? ? ? ? self.delegates = [NSMutableArray array];
? ? ? ??
? ? ? ? // 測(cè)試,執(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;
}

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

// 測(cè)試代理分發(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

實(shí)現(xiàn)方案二

采用NSPointerArray去聲明delegates的數(shù)組,這樣就可以不用操心管理內(nèi)存泄漏的問(wèn)題, 因?yàn)镹SPointerArray里面的元素都是weak化的。 會(huì)隨著當(dāng)前對(duì)象釋放而釋放掉。

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

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

相關(guān)文章

  • IOS開發(fā)之字典轉(zhuǎn)字符串的實(shí)例詳解

    IOS開發(fā)之字典轉(zhuǎn)字符串的實(shí)例詳解

    這篇文章主要介紹了IOS開發(fā)之字典轉(zhuǎn)字符串的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家掌握這樣的方法,需要的朋友可以參考下
    2017-10-10
  • iOS實(shí)現(xiàn)簡(jiǎn)易鐘表

    iOS實(shí)現(xiàn)簡(jiǎn)易鐘表

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)簡(jiǎn)易鐘表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 詳談iOS 位置權(quán)限彈出框閃現(xiàn)的問(wèn)題

    詳談iOS 位置權(quán)限彈出框閃現(xiàn)的問(wèn)題

    下面小編就為大家?guī)?lái)一篇詳談iOS 位置權(quán)限彈出框閃現(xiàn)的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • iOS通過(guò)逆向理解Block的內(nèi)存模型

    iOS通過(guò)逆向理解Block的內(nèi)存模型

    自從對(duì) iOS 的逆向初窺門徑后,我也經(jīng)常通過(guò)它來(lái)分析一些比較大的應(yīng)用,參考一下這些應(yīng)用中某些功能的實(shí)現(xiàn)。這個(gè)探索的過(guò)程樂(lè)趣多多,不僅能滿足自己對(duì)未知的好奇心,還經(jīng)常能發(fā)現(xiàn)一些意外的驚喜。這篇文章主要介紹了iOS通過(guò)逆向如何深入理解Block內(nèi)存模型的相關(guān)資料。
    2017-01-01
  • 解決iOS驗(yàn)證碼顯示在左邊問(wèn)題

    解決iOS驗(yàn)證碼顯示在左邊問(wèn)題

    這篇文章主要介紹了iOS驗(yàn)證碼顯示在左邊問(wèn)題,本文給大家分享解決思路通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • iOS通過(guò)攝像頭圖像識(shí)別技術(shù)分享

    iOS通過(guò)攝像頭圖像識(shí)別技術(shù)分享

    本篇文章給大家詳細(xì)講述了讓IOS開發(fā)中通過(guò)攝像頭進(jìn)行圖像識(shí)別的相關(guān)技術(shù),對(duì)此有興趣的朋友參考學(xué)習(xí)下吧。
    2018-02-02
  • 如何去掉Xcode工程中某種類型的警告

    如何去掉Xcode工程中某種類型的警告

    這篇文章主要給大家介紹了關(guān)于如何去掉Xcode工程中某種類型的警告,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Xcode具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • iOS應(yīng)用開發(fā)中使UITextField實(shí)現(xiàn)placeholder屬性的方法

    iOS應(yīng)用開發(fā)中使UITextField實(shí)現(xiàn)placeholder屬性的方法

    這篇文章主要介紹了iOS應(yīng)用開發(fā)中使UITextField實(shí)現(xiàn)placeholder屬性的方法,示例代碼為傳統(tǒng)的Objective-C語(yǔ)言,需要的朋友可以參考下
    2016-04-04
  • IOS 圓球沿著橢圓軌跡做動(dòng)畫

    IOS 圓球沿著橢圓軌跡做動(dòng)畫

    這篇文章主要介紹了IOS 圓球沿著橢圓軌跡做動(dòng)畫的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • iOS仿網(wǎng)易簡(jiǎn)單頭部滾動(dòng)效果

    iOS仿網(wǎng)易簡(jiǎn)單頭部滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了iOS仿網(wǎng)易簡(jiǎn)單頭部滾動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評(píng)論

车险| 东乌珠穆沁旗| 苏州市| 徐闻县| 云浮市| 榆社县| 霍林郭勒市| 平江县| 侯马市| 永德县| 大余县| 吴旗县| 海林市| 红河县| 蕲春县| 南宁市| 怀化市| 香格里拉县| 察哈| 磴口县| 宿迁市| 桐乡市| 寻乌县| 应城市| 邓州市| 永安市| 高密市| 喀喇沁旗| 嘉定区| 土默特右旗| 策勒县| 同德县| 饶平县| 启东市| 平罗县| 永登县| 汉源县| 金坛市| 中牟县| 龙胜| 巴中市|