Type Encodings

2020-03-01  本文已影响0人  CharmecarWang

Type Encodings

在使用消息转发的时候,我们经常会用到到这个方法methodSignatureForSelector

- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
{
    if (self.target == nil)
        return [NSMethodSignature signatureWithObjCTypes:"v@:@"];
    return [self.target methodSignatureForSelector:selector];
}

该方法用来返回方法签名,即方法的返回值和参数。

那这里的v@:@是什么意思呢?
在OC中方法调用,又称为向一个对象发送消息,比如:

[receiver message]

编译后就是这个样子:

objc_msgSend(receiver, selector)

objc_msgSend方法的文档:

id objc_msgSend(id self, SEL op, ...)

参数:

这里的 “v@:@”就代表:
"v":代表返回值void,其实就对应着objc_msgSend的返回值
"@":代表一个id类型的对象,也就是消息的receiver
":":代表SEL
"@":代表参数,该参数是个id类型对象

再看一个例子

- (BOOL)hasLoadData:(NSString *)url

其ObjCTypes为:"B@:@":

那么我们是怎么确定这个ObjCTypes的呢?

上一篇 下一篇

猜你喜欢

热点阅读