国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Runtime - 方法交換

2019-11-06 09:40:27
字體:
來源:轉載
供稿:網友

    //創建URL    //該方法不安全,string錯誤時也不會報錯,需要加入判斷    NSURL *url = [NSURL URLWithString:@"www.baidu.com/哈哈哈"];    if (url == nil) {        NSLog(@"url 為空");    }//打印結果:

//如何把創建url創建的代碼不做任何改變就添加為空判斷?

添加一個URL的分類 NSURL+ChangeMethods(使用該分類甚至不需要導入頭文件)

//  NSURL+ChangeMethods.h#import <Foundation/Foundation.h>@interface NSURL (ChangeMethods)+ (instancetype)WSY_URLWihString:(NSString *)string;@end

//  NSURL+ChangeMethods.m#import "NSURL+ChangeMethods.h"#import <objc/message.h>  //此處一定要導入@implementation NSURL (ChangeMethods)//加載這個分類時候調用的生命周期方法+ (void)load{    //獲取對象方法,第一個參數為對象 第二額參數為Method方法對象    //class_getInstanceMethod(<#__unsafe_unretained Class cls#>, <#SEL name#>)        //獲取類方法,第一個參數為類Class 第二額參數為Method方法對象    //class_getClassMethod(<#__unsafe_unretained Class cls#>, <#SEL name#>)    //交換方法的實現 method_exchangeImplementations(<#Method m1#>, <#Method m2#>)        //獲取方法名稱    Method URLMethod = class_getClassMethod([NSURL class], @selector(URLWithString:));    Method WSYMethod = class_getClassMethod([NSURL class], @selector(WSY_URLWihString:));    //交換方法實現    method_exchangeImplementations(URLMethod, WSYMethod);}//此處方法已與URLWithString:交換+ (instancetype)WSY_URLWihString:(NSString *)string{    NSURL *url = [NSURL WSY_URLWihString:string]; //因為方法名已交換,此處實質是調用了URLWithString:    if (url == nil) {        NSLog(@"這個Url為空");    }    return url;}@end

再次回到控制器,重新初始化URL

NSURL *url = [NSURL URLWithString:@"www.baidu.com/哈哈哈"];運行 

查看結果

總結:

類似于UIImage imageWithNamed:這一類的系統類的這類初始化方法都可以采用此方法加一道安全監測

開發時可以用來監測,發布時最好改回原來正常代碼


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 克山县| 南京市| 盐边县| 彩票| 巴南区| 仙桃市| 疏附县| 扬中市| 奉化市| 蒲江县| 嵊州市| 卓尼县| 项城市| 洞口县| 阜城县| 永兴县| 西和县| 崇礼县| 卫辉市| 彭阳县| 饶河县| 南京市| 潍坊市| 西充县| 布拖县| 嵩明县| 璧山县| 安阳市| 铁力市| 辽源市| 射阳县| 于田县| 阳信县| 湘潭县| 加查县| 台安县| 定襄县| 珲春市| 鹰潭市| 铁岭市| 咸阳市|