首页 > TAG信息列表 > NSObject

OC笔记 - isMemberOfClass | isKindOfClass

isMemberOfClass | isKindOfClass 1 - 猜想以下代码输出的结果 1 #import <Foundation/Foundation.h> 2 #import <objc/runtime.h> 3 @interface Person : NSObject 4 5 @end 6 @implementation Person 7 8 @end 9 10 int main(int argc, const char * argv[])

使用 NSProxy 实现消息转发

一、简介 ​ 在 iOS 应用开发中,自定义一个类一般需要继承自 NSObject 类或者 NSObject 子类,但是,NSProxy 类不是继承自 NSObject 类或者 NSObject 子类,而是一个实现了 NSObject 协议的抽象基类。 /* NSProxy.h Copyright (c) 1994-2019, Apple Inc. All rights reserved. */ #imp

iOS开发笔记 isKindOfClass和isMemberOfClass的区别

isKindOfClass和isMemberOfClass的区别 底层实现 直接看底层实现: + (BOOL)isMemberOfClass:(Class)cls { return self->ISA() == cls; } - (BOOL)isMemberOfClass:(Class)cls { return [self class] == cls; } + (BOOL)isKindOfClass:(Class)cls { for (Class tcls

OC笔记 - OC对象的分类

OC对象的分类 1 - OC中的对象主要可以分为三种 ① instance对象:实例对象 ② class对象:类对象 ③ meta-class对象:元类对象 实例对象 1 - 实例对象是通过类 alloc出来的对象,每次 alloc都会产生出一个新的实例对象,占据不同的内存 NSObject *objc1 = [NSObject new]; NSObject *objc

OC笔记 - 对象的本质

前言 1 - iOS中的 OC代码,底层是由 C/C++编写的,OC面向对象也是基于 C/C++的数据结构实现的:OC --> C/C++ --> 汇编语言 --> 机器语言 NSObject对象本质 1 - NSObject对象是一个结构体,里面只有一个成员变量 isa 1 #import <Foundation/Foundation.h> 2 3 // 底层实现:其实是 C++

如何使用 rumtime 动态添加一个类

  // 添加一个继承NSObject的类 类名是MyClass Class MyClass = objc_allocateClassPair([NSObject class], "MyClass", 0); // 增加实例变量 class_addIvar(MyClass, "_age", sizeof(NSString *), 0, "@"); //注册这个类到runtime系统中就可以使用他了 objc_registerClassPair(

iOS 底层原理探索之 isKindOfClass & isMemberOfClass

isMemberOfClass今天通过两个经典面试题,继续加深对isa & 继承关系 & 类结构 的理解。在之前的isa探索中,我们了解了:isa的指向:对象的 isa 指向 类; 类的 isa 指向 元类;元类的 isa 指向 根元类;根元类的 isa 指向 自己。类的superclass的指向:类的 superclass 指向 父类, 父类的 supercl

NSObject常用方法总结

-(BOOL) isKindOfClass: classObj 用来判断是否是某个类或其子类的实例 -(BOOL) isMemberOfClass: classObj 用来判断是否是某个类的实例 -(BOOL) respondsToSelector: selector 用来判断是否有以某个名字命名的方法(被封装在一个selector的对象里传递) +(BOOL) instancesRespondT

关联对象

关联对象 作用 在已存在的类的 category 中,可以添加自定义属性。 为何需要 在分类中,因为类的实例变量的布局已经固定,使用 @property 已经无法向固定的布局中添加新的实例变量(这样做可能会覆盖子类的实例变量),所以我们需要使用关联对象以及两个方法来模拟构成属性的三个要素。

iOS底层原理(一)Objective-C的本质

我们平时编写的Objective-C代码,底层实现其实都是C\C++代码,所以Objective-C的面向对象都是基于C\C++的数据结构实现的 OC对象的本质 Objective-C的对象、类主要是基于C\C++的结构体实现的 通过下面的命令可以将OC代码转换为C++代码来查看 clang -rewrite-objc OC源文件 -o 输出的C

1 OC 对象的本质(一个NSObject 对象占用的内存大小)

一 本质 OC 的面向对象都是基于C/C++ 的数据结构实现的     1 OC 的对象和类主要是基于C/C++ 什么数据结构实现的? 结构体   2 clang 命令转换成c++ 代码 clang -rewrite-objc main.m -o main.cpp 以上的命令是不分平台进行编译的,main.cpp 代码有9万多行,如果指定用iphone 的

flutter的UIKitView和platformview之iOS

flutter添加iOS原生的platformview, 遇到的问题: //关于编码格式一定要和ios那边统一,并且和传递的参数类型匹配, //如果flutter传递的是json,map,编码必须是JSONMessageCodec, //flutter传递的是string,编码必须是Stringcodec,否则会出错,加载不了view flutter代码: @override Widg

OC 底层探索 06、 isa 经典问题分析

  经典问题分析 一、类的归属问题 1、2个API  objc_getMetaClass() --> 获取元类 class_getMethodImplementation() --> 获取 IMP 2、实例方法 和 类方法 分析 1. 实例方法 class_getInstanceMethod() --> 类的实例方法 2. 类方法 class_getClassMethod() --> class_getInst

自定义KVO(三)

下面来实现KVO自动销毁:(在合适的时候,自动移除观察者)     @implementation NSObject (FXKVO)   - (void)dealloc{     //指回父类     Class superClass = [self class];//KVOStudent     object_setClass(self, superClass); }   这里出现一个问题,就是VC在销毁时候deal

iOS Runtime面试题(一个objc对象的isa的指针指向什么?有什么作用?)

一个objc对象的isa的指针指向什么?有什么作用? 指向他的类对象,从而可以找到对象上的方法 详解:下图很好的描述了对象,类,元类之间的关系: 图中实线是 super_class指针,虚线是isa指针。 1.Root class (class)其实就是NSObject,NSObject是没有超类的,所以Root class(class)的superclass指向n

从OC到Swift(5)- 动态性,KVC\KVO

dynamic 被@objc dynamic 修饰的内容会具有动态性,比如调用方法会走runtime那一套流程 class Dog: NSObject { @objc dynamic func test1() {} func test2() {} } var d = Dog() d.test1() d.test2() 对应汇编 KVC\KVO Swift支持KVC\KVO的条件 属性所在的

IOS底层探索(一)OC对象内存分析

IOS底层探索(一)OC对象内存分析11.1 OC对象占用内存原理11.1.1 初始OC对象占用内存11.1.1.1 查看内存具体内容方法11.1.1.2 查看属性占用内存情况 11.1 OC对象占用内存原理 OC对象 最少占用 16 个字节内存. 当对象中包含属性, 会按属性占用内存开辟空间. 每一行 16 个字节

面试驱动技术之 - isa && 元类 && 函数调用

原文链接:https://www.jianshu.com/p/adfe14dd4ace 伪装成首页 面试驱动技术之 - 带着面试题来找答案 一个NSObject 对象,占用多少内存 对象方法 与 类方法的存放在哪 什么是isa指针 什么是meta-class megsend 是如何找到方法的 @implementation MNSubcl

一个 Objective-C 对象的内存结构是怎样的?

问题 一个 Objective-C 对象的内存结构是怎样的? 答案 这是一道老题,或许很多人都准备过,其实如果不是被每个公司都考查的话,这道题可以看看候选人对于 iOS 背后底层原理的感兴趣程度。真正对编程感兴趣的同学,都会对这个多少有一些好奇,进而在网上搜索并学习这方面的资料。 以下是本题

对象内存结构中的 isa 指针是用来做什么的?

问题 Objective-C 对象内存结构中的 isa 指针是用来做什么的,有什么用? 答案 Objective-C 是一门面向对象的编程语言。每一个对象都是一个类的实例。在 Objective-C 语言的内部,每一个对象都有一个名为 isa 的指针,指向该对象的类。每一个类描述了一系列它的实例的特点,包括成员变量的

iOS sqlite ORM框架-LKDBHelper

LKDBHelper 一个sqlite ORM(全自动操作数据库)框架。线程安全、不再担心递归锁死的问题 安装要求 iOS 4.3+ 仅支持 ARC FMDB 添加到你的项目 如果你使用 CocoaPods,直接添加下面的代码到你的 Podfile文件 pod 'LKDBHelper' 使用 Encryption,添加下面的代码(顺序不能错) pod

OC对象的本质及分类

Object-C的底层都是通过C/C++来实现的,所以OC中的对象也会转化成C/C++中的某一个数据结构, 我们在终端里通过指令 xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main_arm64.cpp 将oc代码转化为c++代码,我们可以看到NSObject的底层结构是: struct NSObject_IMPL

swift的@objc总结

One can explicitly write @objc on any Swift declaration that can be expressed in Objective-C.  @objc相关的参量只能修饰类、类的成员、扩展以及只能被类实现的协议; 下面开列修饰的情况和说明   一、无修饰 NSObject-derived classes no longer infer @objc   A declarati