Objective-C 中的 Meta-class 是什么?
在这篇文章中,我关注的是 Objective-C 中的一个陌生的概念—— meta-class。在 Objective-C 中的每个类都有一个相关联的 meta-class,但是你很少会直接使用 meta-class,他们仍旧保持着神秘的面纱。我们
“”
- Class newClass =
- objc_allocateClassPair([NSError class], "RuntimeErrorSubclass", 0);
- class_addMethod(newClass, @selector(report), (IMP)ReportFunction, "v@:");
- objc_registerClassPair(newClass);
- void ReportFunction(id self, SEL _cmd)
- {
- NSLog(@"This object is %p.", self);
- NSLog(@"Class is %@, and super is %@.", [self class], [self superclass]);
- Class currentClass = [self class];
- for (int i = 1; i < 5; i++)
- {
- NSLog(@"Following the isa pointer %d times gives %p", i, currentClass);
- currentClass = object_getClass(currentClass);
- }
- NSLog(@"NSObject's class is %p", [NSObject class]);
- NSLog(@"NSObject's meta class is %p", object_getClass([NSObject class]));
- }
- typedef struct objc_object {
- Class isa;
- } *id;
- [@"stringValue"
- writeToFile:@"/file.txt" atomically:YES encoding:NSUTF8StringEncoding error:NULL];
- NSStringEncoding defaultStringEncoding = [NSString defaultStringEncoding];
- typedef struct objc_class *Class;
- struct objc_class {
- Class isa;
- Class super_class;
- /* 以下依赖于 runtime 的具体实现 …… */
- };
- id instanceOfNewClass =
- [[newClass alloc] initWithDomain:@"someDomain" code:0 userInfo:nil];
- [instanceOfNewClass performSelector:@selector(report)];
- [instanceOfNewClass release];
的 meta-class)。
- This object is 0x10010c810.
- Class is RuntimeErrorSubclass, and super is NSError.
- Following the isa pointer 1 times gives 0x10010c600
- Following the isa pointer 2 times gives 0x10010c630
- Following the isa pointer 3 times gives 0x7fff71038480
- Following the isa pointer 4 times gives 0x7fff71038480
- NSObject's class is 0x7fff710384a8
- NSObject's meta class is 0x7fff71038480
Objective-C 中的 Meta-class 是什么?的更多相关文章
- HTML中的meta(转载)
meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:name和 ...
- 使用CSS中的meta实现web定时刷新或跳转的方法
这篇文章主要介绍了使用CSS中的meta实现web定时刷新或跳转的方法,比使用JavaScript脚本实现起来更加简单一些,需要的朋友可以参考下 meta源信息功能之页面定时跳转与刷新 几乎所有的网页 ...
- 理解Objective C 中id
什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
- objective C中的字符串NSStirng常用操作
objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的 ...
- HTML中的<meta>标签的使用
HTML中<meta>标签的使用 在我们制作的网页中,要是想让它能够让更多的人去访问,最好的方法就是通过搜索引擎来找到你的网址,于是需要你的网页可以有关键词能够让搜索引擎来识别,于是HTM ...
- html中的meta详解
1 name=viewport <meta name="viewport" content="width=device-width,initial-scale=1 ...
- Objective C中的ARC的修饰符的使用---- 学习笔记九
#import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...
- 移动web app 中的meta 标签
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scal ...
- 清除ASPX页面中的meta:resourceKey="[a-zA-Z0-9]+"
在替换对话框中,选中“使用正则表达式”, 被替换内容,使用 meta:resourceKey="[a-zA-Z0-9]+" 然后替换整个文档就可以了.
随机推荐
- 笔记:TCP/IP基础知识
TCP/IP是指利用IP进行通信时必须用到的协议群的统称. 互联网层(网络层) IP IP是跨越网络传送数据包,使整个网络都能收到数据的协议.IP地址在发送数据的时候作为主机的标识. ICMP 用来诊 ...
- Vue-cli开发笔记一----------项目的结构
配置文件package.json: 搜索了配置的原理:https://segmentfault.com/a/1190000000344102 里面讲到:npm会在package.json文件中找scr ...
- Maven的标准settings.xml文件
配置目标 1. 默认jdk采用java8 2. 配置阿里云镜像和私服镜像, 并且先从阿里云下载, 下载不到的再去私服下载 <?xml version="1.0" encodi ...
- 单向连通图 Going from u to v or from v to u? poj2762
http://poj.org/problem?id=2762 强连通求子图和子图关系 + 子图关系是链式结构 #include <cstdio> #include <cstdlib& ...
- C/C++ 智能指针
// 转载自 :https://www.cnblogs.com/wuyepeng/p/9741241.html { 为什么要使用智能指针:我们知道c++的内存管理是让很多人头疼的事,当我们写一个new ...
- 01退背包——bzoj2287
退背包就是限制某一件物品不可取的方案数 先做出无限制的方案数,然后对于当前不可取的物品,dp2[j]表示不取改物品情况下,取得体积为j的方案数 有状态方程 dp2[j]=dp1[j]-dp2[j-w[ ...
- NX二次开发-UFUN相加布尔操作,可保留或删除目标体,工具体UF_MODL_unite_bodies_with_retained_options
NX11+VS2013 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建块 UF_FEATURE_SIGN ...
- 常用Git命令以及出现的状况ing
(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 我的GitHub: Cwolf9 下面是我学习Git时了解到的一些命令和状况经验. 把它们记下来免得忘了.就算忘了也有地方看... 状 ...
- mysql中的Date日期格式的问题:只有日期没有时间及格式化时间
只有日期没有时间,把xml中的date改为timestamp 格式化最简单的方法:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", time ...
- (转)coures包下载和安装 可解决报错ImportError: No module named '_curses'
原创文章,转载请注明出处. coures curses 库 ( ncurses )提供了控制字符屏幕的独立于终端的方法.curses 是大多数类似于 UNIX 的系统(包括Linux)的标准部分,而且 ...