[plain] view plaincopy
NSMethodSignature顾名思义应该就是“方法签名”,类似于C++中的编译器时的函数签名。
官方定义该类为对方法的参数、返回类似进行封装,协同NSInvocation实现消息转发。

通过消息转发可以用B实现A的方法。也是一种多重继承的解决方法。
<p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span class="kwd" style="color: rgb(0, 0, 136);">interface</span><span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">LOCBird</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">NSObject</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span>
<span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">NSString</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln"> name_</span><span class="pun" style="color: rgb(102, 102, 0);">;</span>
<span class="pln">    </span>
<span class="pun" style="color: rgb(102, 102, 0);">}</span>
<span class="lit" style="color: rgb(0, 102, 102);">@end</span><span class="lit" style="color: rgb(0, 102, 102);">@implementation</span><span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">LOCBird</span><span class="pun" style="color: rgb(102, 102, 0);">-</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln">id</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln">init</span>
<span class="pun" style="color: rgb(102, 102, 0);">{</span>
<span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">self</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="kwd" style="color: rgb(0, 0, 136);">super</span><span class="pln"> init</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">if</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="kwd" style="color: rgb(0, 0, 136);">self</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span>
<span class="pln">  name_ </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[[</span><span class="typ" style="color: rgb(102, 0, 102);">NSString</span><span class="pln"> alloc</span><span class="pun" style="color: rgb(102, 102, 0);">]</span><span class="pln"> initWithString</span><span class="pun" style="color: rgb(102, 102, 0);">:@</span><span class="str" style="color: rgb(0, 136, 0);">"I am a Bird!!"</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln">  </span>
<span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">}</span>
<span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">return</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">self</span><span class="pun" style="color: rgb(102, 102, 0);">;</span>
<span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pun" style="color: rgb(102, 102, 0);">-</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln">dealloc</span>
<span class="pun" style="color: rgb(102, 102, 0);">{</span>
<span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">name_ release</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="kwd" style="color: rgb(0, 0, 136);">super</span><span class="pln"> dealloc</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pun" style="color: rgb(102, 102, 0);">-</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="typ" style="color: rgb(102, 0, 102);">NSMethodSignature</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">*)</span><span class="pln">methodSignatureForSelector</span><span class="pun" style="color: rgb(102, 102, 0);">:(</span><span class="pln">SEL</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln">aSelector</span>
<span class="pun" style="color: rgb(102, 102, 0);">{</span>
<span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">NSMethodSignature</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln"> signature </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="kwd" style="color: rgb(0, 0, 136);">super</span><span class="pln"> methodSignatureForSelector</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln">aSelector</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">if</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln">signature</span><span class="pun" style="color: rgb(102, 102, 0);">==</span><span class="kwd" style="color: rgb(0, 0, 136);">nil</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span>
<span class="pln">  signature </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">name_ methodSignatureForSelector</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln">aSelector</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">}</span>
<span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">NSUInteger</span><span class="pln"> argCount </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">signature numberOfArguments</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">for</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="typ" style="color: rgb(102, 0, 102);">NSInteger</span><span class="pln"> i</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="lit" style="color: rgb(0, 102, 102);">0</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> i</span><span class="pun" style="color: rgb(102, 102, 0);"><</span><span class="pln">argCount </span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> i</span><span class="pun" style="color: rgb(102, 102, 0);">++)</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span>
<span class="pln">  </span><span class="typ" style="color: rgb(102, 0, 102);">NSLog</span><span class="pun" style="color: rgb(102, 102, 0);">(@</span><span class="str" style="color: rgb(0, 136, 0);">"%s"</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">signature getArgumentTypeAtIndex</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln">i</span><span class="pun" style="color: rgb(102, 102, 0);">]);</span>
<span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">}</span>
<span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">NSLog</span><span class="pun" style="color: rgb(102, 102, 0);">(@</span><span class="str" style="color: rgb(0, 136, 0);">"returnType:%s ,returnLen:%d"</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">signature methodReturnType</span><span class="pun" style="color: rgb(102, 102, 0);">]</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">signature methodReturnLength</span><span class="pun" style="color: rgb(102, 102, 0);">]);</span>
<span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">NSLog</span><span class="pun" style="color: rgb(102, 102, 0);">(@</span><span class="str" style="color: rgb(0, 136, 0);">"signature:%@"</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln"> signature</span><span class="pun" style="color: rgb(102, 102, 0);">);</span>
<span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">return</span><span class="pln"> signature</span><span class="pun" style="color: rgb(102, 102, 0);">;</span>
<span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pun" style="color: rgb(102, 102, 0);">-</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln">forwardInvocation</span><span class="pun" style="color: rgb(102, 102, 0);">:(</span><span class="typ" style="color: rgb(102, 0, 102);">NSInvocation</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">*)</span><span class="pln">anInvocation</span>
<span class="pun" style="color: rgb(102, 102, 0);">{</span>
<span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">NSLog</span><span class="pun" style="color: rgb(102, 102, 0);">(@</span><span class="str" style="color: rgb(0, 136, 0);">"forwardInvocation:%@"</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln"> anInvocation</span><span class="pun" style="color: rgb(102, 102, 0);">);</span>
<span class="pln"> SEL seletor </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">anInvocation selector</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">if</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">([</span><span class="pln">name_ respondsToSelector</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln">seletor</span><span class="pun" style="color: rgb(102, 102, 0);">])</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span>
<span class="pln">  </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">anInvocation invokeWithTarget</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln">name_</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">}</span>
<span class="pln"> </span>
<span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="lit" style="color: rgb(0, 102, 102);">@end</span></p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;">
</p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span class="com" style="color: rgb(136, 0, 0);">//调用</span></p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span class="com" style="color: rgb(136, 0, 0);"> id bird = [[LOCBird alloc] init];</span>
<span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">NSLog</span><span class="pun" style="color: rgb(102, 102, 0);">(@</span><span class="str" style="color: rgb(0, 136, 0);">"len= %d"</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">bird length</span><span class="pun" style="color: rgb(102, 102, 0);">]);</span></p>

输出 参考

表 6-1  Objective-C类型编码

编码

含义

c

char

i

int

s

short

l

long

在64位程序中,l为32位。

q

long long

C

unsigned char

I

unsigned int

S

unsigned short

L

unsigned long

Q

unsigned long long

f

float

d

double

B

C++标准的bool或者C99标准的_Bool

v

void

*

字符串(char *

@

对象(无论是静态指定的还是通过id引用的)

#

类(Class

:

方法选标(SEL)

[array type]

数组

{name=type...}

结构体

(name=type...)

联合体

bnum

num个bit的位域

^type

type类型的指针

?

未知类型(其它时候,一般用来指函数指针)

使用方法
<p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span class="pun" style="color: rgb(102, 102, 0);">-(</span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln"> initWithTarget</span><span class="pun" style="color: rgb(102, 102, 0);">:(</span><span class="pln">id</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln"> rec selector</span><span class="pun" style="color: rgb(102, 102, 0);">:(</span><span class="pln">SEL</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln"> cb</span><span class="pun" style="color: rgb(102, 102, 0);">{</span>
<span class="pln">    anchorPoint_ </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln"> ccp</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="lit" style="color: rgb(0, 102, 102);">0.5f</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln"> </span><span class="lit" style="color: rgb(0, 102, 102);">0.5f</span><span class="pun" style="color: rgb(102, 102, 0);">);</span>
<span class="pln">    </span><span class="typ" style="color: rgb(102, 0, 102);">NSMethodSignature</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln"> sig </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">nil</span><span class="pun" style="color: rgb(102, 102, 0);">;</span>
<span class="pln">    </span><span class="kwd" style="color: rgb(0, 0, 136);">if</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln"> rec </span><span class="pun" style="color: rgb(102, 102, 0);">&&</span><span class="pln"> cb </span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span>
<span class="pln">        sig </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">rec methodSignatureForSelector</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln">cb</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln">        invocation </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">nil</span><span class="pun" style="color: rgb(102, 102, 0);">;</span>
<span class="pln">        invocation </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="typ" style="color: rgb(102, 0, 102);">NSInvocation</span><span class="pln"> invocationWithMethodSignature</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln">sig</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln">        </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">invocation setTarget</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln">rec</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln">        </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">invocation setSelector</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln">cb</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln">        </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">invocation setArgument</span><span class="pun" style="color: rgb(102, 102, 0);">:&</span><span class="kwd" style="color: rgb(0, 0, 136);">self</span><span class="pln"> atIndex</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="lit" style="color: rgb(0, 102, 102);">2</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln">        </span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">invocation retain</span><span class="pun" style="color: rgb(102, 102, 0);">];</span>
<span class="pln">    </span><span class="pun" style="color: rgb(102, 102, 0);">}</span>
<span class="pun" style="color: rgb(102, 102, 0);">}</span></p>

当 [invocation invoke];是调用SEL。上述第二个参数为自身。

用NSMethodSignature和NSInvocation实现编码
[plain] view plaincopy
  1. - (void)encodeWithCoder:(NSCoder *)encoder{
  2. NSDictionary *attrDic = [self getKeyAndObjectForDictionry];
  3. if (attrDic == nil) {
  4. return;
  5. }
  6. NSEnumerator *keyEnum = [attrDic keyEnumerator];
  7. id attributeName;
  8. while ((attributeName = [keyEnum nextObject])) {
  9. SEL getSel = NSSelectorFromString(attributeName);
  10. if ([self respondsToSelector:getSel]) {
  11. NSMethodSignature *signature = nil;
  12. signature = [self methodSignatureForSelector:getSel];
  13. NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
  14. [invocation setTarget:self];
  15. [invocation setSelector:getSel];
  16. NSObject *valueObj = nil;
  17. [invocation invoke];
  18. [invocation getReturnValue:&valueObj];
  19. if (valueObj) {
  20. [encoder encodeObject:valueObj forKey:attributeName];
  21. }
  22. }
  23. }
  24. }

NSMethodSignature和NSInvocation的用法相关推荐

  1. iOS项目组件化历程

    为什么要组件化 随着业务的发展,App中的页面,网络请求,通用弹层UI,通用TableCell数量就会剧增,需求的开发人员数量也会逐渐增多. 如果所有业务都在同一个App中,并且同时开发人数较少时,抛 ...

  2. 【精】iOS知识树,知识点(包括对象、Block、消息转发、GCD、运行时、runloop、动画、Push、KVO、tableview,UIViewController、提交AppStore)

    本文旨在总结iOS知识网络,知识点,该知识网络罗列出常见UIKit.Foundation的对象特点和一些使用经验,可以看成是一本书:文本编辑采用树的形式,对知识点进行罗列,并标注一些使用经验(★)希望 ...

  3. 自己学习Foundation一些类

    一些类 NSDecimalNumber 数字精准计算 NSCache 线程安全的Memory缓存 NSCharacterSet 字符串分割.过滤等 NSEnergyFormatter 以焦耳和卡路里作 ...

  4. Swift与Objective-C交互

    在同一个工程中是可以同时使用Swift和OC的,但不可以同时出现在同一个文件中. OC调用Swift相关信息的方法 在***.m文件中导入工程名-Swift.h即可. 如工程名为ABC,则在需要使用S ...

  5. NSInvocation的一种用法

    大家知道NSInvocation可以用来发起一次target对action的调用,还可以携带任意多的参数,它比NSObject的performSelector更为强大... 最近在做静态库,为了对一组 ...

  6. NSInvocation

    IOS中有一个类型是SEL,它的作用很相似与函数指针,通过performSelector:withObject:函数可以直接调用这个消息.但是perform相关的这些函数,有一个局限性,其参数数量不能 ...

  7. IOS NSInvocation应用与理解

    IOS中有一个类型是SEL,它的作用很相似与函数指针,通过performSelector:withObject:函数可以直接调用这个消息.但是perform相关的这些函数,有一个局限性,其参数数量不能 ...

  8. @dynamic 模拟NSManagedObject类的内部实现,AFN的非常规用法

    @property和@synthesize复习 @property生成setter和getter的声明,同时生成属性对应的成员变量,并且前面加一个下划线_.如果将getter和setter的实现同时重 ...

  9. iOS之NSInvocation详解

    一.NSInvocation的基本用法 在 iOS中可以直接调用某个对象的消息方式有两种: 一种是performSelector:withObject: 再一种就是NSInvocation. 第一种方 ...

最新文章

  1. java十六进制转二进制_Java进制都有哪些?
  2. 资深算法工程师万宫玺:Java工程师转型AI的秘密法宝——深度学习框架Deeplearning4j | 分享总结
  3. 989-数组形式的整数加法
  4. javascript要点
  5. 网络验证php接口逆向,一个专利查错的逆向(网络验证)
  6. 【Linux】linux grep过滤中,不包含某些字符串
  7. 二十四 Redis消息订阅事务持久化
  8. Linux命令解释之fdisk
  9. centos 安装mysql5.7
  10. 【入门】PyTorch文本分类
  11. 原生开发跟混合开发?两者有什么区别?
  12. Android实战之 上传头像 和仿QQ空间、微博发表文字和图片
  13. VBA和VBScript的AES加密算法
  14. Vivado 信号混频设计
  15. 【板栗糖GIS】WPS-怎么在表格里设置超链接并修改风格
  16. 在船舶共轨实验平台上使用Mbed LPC1768
  17. 服务器系统关机了怎么办,各种服务器系统的关机
  18. 由浅入深学习Flash制作高射炮游戏(2)
  19. Ubuntu18.04 安装 Idea 2018.2 Ultimate
  20. Pad application for ordering (应用之酒店点菜系统)

热门文章

  1. python的datetime举例_Python datetime.timedelta()用法及代码示例
  2. python关联分析引擎_PowerBI x Python 之关联分析(上)
  3. 我是Python小玩家,一行代码能做哪些炫酷的事情 (三十一)
  4. 二十五、Kaggle | 全球听众最多的50首歌曲
  5. 当Swin Transformer遇上DCN,清华可变形注意力Transformer模型优于多数ViT
  6. 北京内推 | 腾讯云小微自然语言技术中心招聘NLP研究型实习生
  7. 用最简单的方式训练史上最强ResNet-50,性能超过魔改结构的ResNeSt
  8. 视角不平衡立体匹配研究
  9. 岗位推荐 | 腾讯AI Lab多媒体算法组招聘正式员工和实习生
  10. Fashion-MNIST数据集发布一周年,论文引用量超250篇