RunTime 方法交换 NSURL 空值处理

Posted lulushen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RunTime 方法交换 NSURL 空值处理相关的知识,希望对你有一定的参考价值。

RunTime 消息机制

Objective-C 扩展了 C 语言,并加入了面向对象特性和 Smalltalk 式的消息传递机制。而这个扩展的核心是一个用 C 和 编译语言 写的 Runtime 库。它是 Objective-C 面向对象和动态机制的基石。
消息机制是运行时里面最重要的机制,OC是动态语言,本质都是发送消息,每个方法在运行时会被动态转化为消息发送,即:objc_msgSend(receiver, selector)
RunTime 官方API
 
NSURL 空值处理 使用runtime方法交换 :
创建NSURL分类 在分类中直接修改URLWithString:做非空判断不可行,但是又希望URLWithString:方法能做非空处理,这个时候可以分类中创建一个新的类方法SL_URLWithString做非空处理,再通过runtime实现两个方法交换,调用系统方法URLWithString实际调用的是SL_URLWithString;
下面是NSURL分类。
//
//  NSURL+url.h
//  ios_study00
//
//  Created by Datacvg on 2019/9/6.
//  Copyright © 2019 Datacvg. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSURL (url)
+(instancetype)SL_URLWithString:(NSString*)URLString;
@end

NS_ASSUME_NONNULL_END
//
//  NSURL+url.m
//  iOS_study00
//
//  Created by Datacvg on 2019/9/6.
//  Copyright © 2019 Datacvg. All rights reserved.
//

#import "NSURL+url.h"
#import <objc/runtime.h>

@implementation NSURL (url)
+(void)load

    /**
        在类加载方法里面使用RunTime实现方法交换(URLWithString与SL_URLWithString)
        load加载比init alloc都早
        没有使用NSURL类也会加载(程序运行就会加载)
        NSURL+url.m在Build Phases -> Compile Sources 里面原文件参与编译
     */
    //class_getInstanceMethod :获取对象方法
    //class_getClassMethod: 获取类方法

    Method URLWithString = class_getClassMethod([NSURL class], @selector(URLWithString:));
    Method SLURLWithString =  class_getClassMethod([NSURL class], @selector(SL_URLWithString:));
    //交换
    method_exchangeImplementations(URLWithString, SLURLWithString);

+(instancetype)SL_URLWithString:(NSString *)URLString

    //方法交换后SL_URLWithStringy对应系统方法URLWithString
    NSURL * url = [NSURL SL_URLWithString:URLString];
    if (url == nil) 
        NSLog(@"url为空");
    
    return url;

@end

 

 

以上是关于RunTime 方法交换 NSURL 空值处理的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server的空值处理策略

freemarker 处理空值

处理空值的最优雅方法是啥

Excel处理数据与Python处理数据方法对比

Hive--对空值和NULL的处理

Java8特性:Optional空值处理