目标C反思

Phi*_*yNJ 0 cocoa-touch introspection objective-c

在对类执行内省时,我使用以下代码:

if([object isKindOfClass:[NSNumber class]]){

        NSLog(@"I am an NSNumber: %@", object);
    }

 NSLog(@"Properties:%@", [object class]);
Run Code Online (Sandbox Code Playgroud)

输出是:

I am an NSNumber: 320
Properties:__NSCFNumber
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么结果是类型NSNumber的__NSCFNumber?我还注意到NSArray被识别为:

__NSArrayI
Run Code Online (Sandbox Code Playgroud)

NSR*_*der 6

NSNumber是一个类集群. NSNumber是几个具体子类的抽象公共超类.NSNumber使用任何+numberWith...方法创建时,您将获得其中一个子类的实例.

当您将对象作为对应于"%@"存储说明符的参数传递给NSLog()时,NSLog()将向该对象发送一条-description消息,并将从该消息表达式返回的任何内容插入到它写入stderr文件描述符的字符串中.

  • 有点; 它更直截了当.在类集群中,您通常会与一个抽象类进行对话,该抽象类在实例化时返回一个对请求的配置最佳的私有子类的实例.你不应该关心 - 甚至不知道 - 这种情况正在发生. (4认同)