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]+" 然后替换整个文档就可以了.
随机推荐
- Mysql优化-典型的服务器配置
内存配置相关参数 mysql内存分配需要考虑到操作系统需要使用的内存,其他应用程序所要使用的内存,mysql的会话数以及每个会话使用的内存,然后就是操作系统实例所使用的内存.生产环境的mysql往往都 ...
- 2019牛客暑期多校训练营(第六场)Palindrome Mouse 回文树+dfs
题目传送门 题意:给出一个字符串,将字符串中所有的回文子串全部放入一个集合里,去重后.问这个集合里有几对<a,b>,使得a是b的子串. 思路:一开始想偏了,以为只要求每个回文串的回文后缀的 ...
- Jmeter-【beanshell处理器】-获取时间
一.通过操作变量
- 线程池 一 ThreadPoolExecutor
java.util.concurrent public class ThreadPoolExecutor extends AbstractExecutorService ThreadPoolExecu ...
- thinkphp 数据分页
通常在数据查询后都会对数据集进行分页操作,ThinkPHP也提供了分页类来对数据分页提供支持. 下面是数据分页的两种示例. 第一种:利用Page类和limit方法 $User = M('User'); ...
- ShellExecute打开文件打开文件夹的用法
1 #include <uf.h> 2 #include <uf_part.h> 3 #include <atlstr.h> 4 #include <iost ...
- 关于对现阶段vue项目的一些总结和感想
一.前言 现阶段手上vue的项目差不多快完了,空闲之余回反复对整个项目的代码结构.实现细节以及框架上的做了一些思考和优化.下面打算把想到的和重点实现的方法记录一下. 二.回顾 对于常规操作,这里不做过 ...
- 直接用编译器按ctrl+F5运行和双击运行结果不一样
是因为进程权限的问题,需要添加下面的代码: BOOL EnableDebugPrivilege() { HANDLE hToken; BOOL fOk=FALSE; if(OpenProcessTok ...
- 深度优先搜索(Depth First Search)
Date:2019-07-01 15:31:11 通俗点理解就是不撞南墙不回头的那种,用栈来实现 算法实现 /* 题目描述: 有n件物品,每件物品的重量为w[i],价值为c[i].现在需要选出若干件物 ...
- springDataJpa的官方API
一 . Core concepts(核心概念) 1.springdata中的中心接口是——Repository.这个接口没有什么重要的功能(原句称没什么惊喜的一个接口).主要的作用就是标记和管理.其 ...