7 OC 中class 类的结构

OC底层——结构体内存对齐 前言 这篇文章中OC底层——alloc分析我们提到过一个align1616字节对齐算法,下面我们就来探索下内存对齐原则。 内存对⻬的原则 1、数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,第 ⼀个数据成员放在offset为0的地⽅,以后每个数据成员存储的起始位置要 从该成员⼤⼩或者成员的⼦成员⼤⼩(只要该成员有⼦成员,⽐如说是数组, 结构体等)的整数倍开始(⽐如int为4字节,则要从4的整数倍地址开始存 储。 min(当前开始的位置m n) m = 9... 阅读详情

目录

一 OC 中class 的结构


 

https://opensource.apple.com/tarballs/objc4/
 

在最新的objc源码中 化繁就简来看的话 是以下结构

struct objc_class : objc_object {


  objc_class(const objc_class&) = delete;
  objc_class(objc_class&&) = delete;
  void operator=(const objc_class&) = delete;
  void operator=(objc_class&&) = delete;
    // Class ISA;
    Class superclass;
    cache_t cache;             // formerly cache pointer and vtable
   class_data_bits_t bits;    // class_rw_t * plus custom rr/alloc flags

}

 

 

 

Swift之深入解析“类”的底层原理 Objective-C 类 熟练 OC 的一定对上面这张图不陌生,没错,这就是 Apple 官方的实例对象、类、元类关系图,形象地展示说明了 isa 的指向关系、superclass 的指向关系以及元类之间的继承关系; 看过 OC 类的实现原理,可以知道 OC 的类是从 objc_class 继承的,NSObject 是 OC 的类型, objc_object 是 c 的类型; 结构体类型 objc_class 继承于 objc_object 类型,其中 objc_object 也是一个结构体,且有一个 阅读详情

相关推荐

Vectorless dynamic动态功耗分析——Voltus

power 计算工具会根据设计信息和用户提供的activity和switching约束来生成虚拟的worst-case的power vector,难点在于哪些instances视为switching,在没有仿真的前提下如何确定开关的时间,使用timing文件(TWF)

qq_44347276的博客 2790

iOS类的本质与底层探索

前言 首先,我们看下几个类型:NSObject、Class、objc_object、objc_class、id的联系与区别。 NSObject:OC中的基类,绝大多数类都继承NSObject(NSProxy也是基类哦~) Class:NSObject的类型,在objc源码的NSObject.mm文件中可以看到 + (Class)class { return self; } objc_object:NSObject类在C++的底层实现的结构体名称,在生成的cpp文件中可以看到,它和N

wywinstonwy的专栏 3810

AI智能体协作:构建更精准的公司破产预测模型

公司破产预测对于金融机构、投资者和监管部门等具有至关重要的意义。准确的破产预测可以帮助金融机构提前做好风险防范,避免贷款损失;投资者可以根据预测结果调整投资组合,降低投资风险;监管部门可以及时发现潜在的金融风险,采取相应的监管措施。然而,传统的公司破产预测模型往往存在精度不高的问题,无法满足实际需求。本研究的目的是利用AI智能体协作的方式,构建一个更精准的公司破产预测模型。通过将多个AI智能体的优势进行整合,充分挖掘公司财务数据、市场数据等多源数据中的信息,提高预测的准确性和可靠性。

2501_92132293的博客 1081

[OC学习笔记]类对象的结构

本文简要分析了类对象的结构

weixin_52192405的博客 706

Python爬虫之爬取并下载哔哩哔哩视频

它可以爬取并下载视频文件和音频文件!亲自使用过,太好用了。

2301_80124151的博客 3万+

Sentence-BERT 语义相似度双塔模型

论文介绍 发表:2019,EMNLP 论文题目:《Sentence-BERT:sentence embeddings using siaese BERT-networks》 论文地址:https://arxiv.org/abs/1908.10084 Github:https://github.com/UKPLab/sentence-transformers 适用领域: 句向量生成 语义相似度计算 语义搜索 无监督任务(聚类) 1 概述 在20年之前的各种预训练模型中,比如bert,XLNet,Alb

weiyaner的博客 9193

OC中的Class类型和class方法

暂时只先备注这些. 后面学到再补充. 来自: https://www.douban.com/note/320064382/ Class类型和int、char、id一样也是一种类型,用于存储类对象的指针,class类型和id类型一样,本身继承于指针类型,故在声明class类型变量时时不需要用星号的。 Class aclass = [someClass clas

q958812300的博客 6451

PLC集群管理:C#上位机实现10台以上分布式PLC的集中监控与指令下发

本文介绍了一套基于C# WPF开发的PLC集群管理系统,用于解决现代工业自动化产线中分布式PLC监控难题。系统采用三层解耦架构,支持100台以内不同品牌PLC的集中管理,具备批量数据采集、指令下发、实时报警等功能。核心创新点包括:1)基于异步IO的连接池管理;2)统一通信接口设计;3)寄存器合并优化算法;4)三级优先级指令队列。实际应用表明,系统数据采集延迟低于100ms,指令下发成功率99.9%,有效解决了传统单PLC监控模式存在的效率低下问题。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 507

iOS Class结构体分析~详解

//联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄 objc_class结构体 一、类在OC中是objc_class的结构体指针   typedef struct objc_class *Class; 在objc/runtime.h中objc_class结构体的定义如下: struct objc_class {

石虎 5029

[QMT量化交易小白入门]-七十六、从tick数据中获取高频交易的量价背离信号

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 791

RT-DETR改进策略【RT-DETR和Mamba】| 替换骨干 Mamba-RT-DETR-T !!! 最新的发文热点

模块是模型中的一个重要组成部分,其主要作用是在模型的初始阶段对输入图像进行处理,方便后续的特征提取和目标检测。以下是对。

Limiiiing的博客 1322

OC 类的结构分析

网络中有个关于类的关系的图 图中虚线部分是isa的的继承关系 证明如下图 对象->类 //打印16进制person的内存地址 (lldb) p/x person (LGPerson *) $26 = 0x00000001006e8400 //读取person的内存地址 (lldb) x/4gx 0x00000001006e8400 0x1006e8400: 0x001d8001000020f1 0x0000000000000000 0x1006e8410: 0x00000001006e84e0

a1034386099的博客 790

图神经网络实战(21)——图神经网络的可解释性

在本节中,我们探讨了应用于图神经网络 (Graph Neural Networks, GNN) 的可解释性人工智能 (Explainable Artificial Intelligence, XAI) 技术。可解释性是许多领域的关键要素,可以帮助我们建立更好的模型。我们介绍了不同的局部解释技术,并重点讨论了 GNNExplainer (基于扰动的方法),在图分类任务中应用 GNNExplainer。

盼小辉丶的博客 9532

【iOS】—— 对象的底层结构和继承者链(isa、class)

这里面其实利用位域存储数据,简单来说因为这个bits跟指针大小相同,在iOS中指针大小是8个字节,也就是64位,但是通常单一数据无法用满这64位的,会有很多空位,造成空间浪费。想要一个可以保存体系结构指针类型的整数类型的常见原因是对指针执行特定于整数的操作,或者通过将指针提供为整数“句柄”来模糊指针的类型。的类型,由代码中标注的出来的内存大小,可以算出最后计算出的cache类的内存大小为12+2+2=16字节。指针,那么也就是说明,每一个新定义的类,它对应的结构体中都会有一个这个。......

m0_55124878的博客 984

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

OC底层原理之NSObject

本系列主要是看完MJ的OC底层原理课程所写的总结,希望自己能加深对iOS底层的了解。 NSObject的本质 NSObject的底层实现就是一个结构体 ,而且只带有一个Class类型的成员变量isa @interface NSObject{ Class isa; } struct NSObject_IMPL{ Class isa; } 复制代码OC对象的本质 分析Objec...

weixin_33826609的博客 241

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OC学习之深入c ——结构体

今天在学习中,看到这样一个语法: Test *t = [[Test alloc]init]; t->_next = @"next"; 引发了我一个思考,oc的对象可以使用->访问成员变量,那么,oc中对成员变量的处理是怎么样的呢,是否是底层封装的结构体呢? 带着这个思考我查阅了一些文章。下面是关于 “.”语法和“->”语法的比较:http:/...

dinglucan6570的博客 189

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

OCNet架构深度剖析:ASP-OC模块与Base-OC模块的实现原理

OCNet(Object Context Network)是一个用于场景解析(语义分割)的深度学习架构,它通过创新的对象上下文机制在多个基准测试中实现了SOTA性能。本文将深入解析OCNet的核心模块——ASP-OC和Base-OC的实现原理,帮助你理解这个强大的语义分割框架。 ## 🔍 什么是OCNet? OCNet(对象上下文网络)是微软研究院提出的语义分割模型,它通过引入"对象上下文"

gitblog_00099的博客 1077

【iOS】—— 类与对象的底层

从源码中可也看到,class_data_bits_t 有一个属性uintptr_t bits,uintptr_t是无符号整数类型,能够存储指针,可以提高内存的利用率,它不止存储class_rw_t结构体指针,还存储其他的信息。​ 从字面上解读:class_ro_t的ro代表的是“只读”,class_rw_t中的rw代表的是“读写”,class_rw_ext_t中的rw_ext表示可读可写的扩展。指针,因此每一个新定义的类,它对应的结构体当中都会有一个这样的class类型的isa指针。

qq_72437394的博客 1098

​iOS Class Guard github用法、工作原理和安装详解及使用经验总结

iOS Class Guard是一个用于OC类、协议、属性和方法名混淆的命令行工具。它是class-dump的扩展。这个工具会生成一个symbol table,这个table在编译期间会包含进工程中。iOS-Class-Guard能有效的隐藏绝大多数的类、协议、方法、属性和 实例变量 名。iOS-Class-Guard不是应用安全的最终解决方案,但是它绝对能让攻击者更难读懂你的程序。iOS-Class-Guard会加大代码分析和runtime检查的难度,这个工具可以认为是一个简单基础的混淆方法。

m0_74760716的博客 1100

iOS Class Guard github用法、工作原理和安装详解及使用经验总结

brew。

m0_74760716的博客 1659

OC对象 - isa指针和supperClass

如果没有父类,supperclass指针位nil。

sharp521的博客 793

iOS-深入理解Objective-C中类的数据结构

一、类的结构 OC 中的代码在底层实现,使用的是 C、C++,所以要研究 OC 中的类结构,可以将 OC 的代码转成 C++的代码即可。首先看一下 NSObject 的结构是什么样子的,创建一个文件并简单的编写如下代码: 1 2 3 4 // CustomFile.m #import void test() {  [NSOb...

MinggeQingchun的博客 372

One-Class Convolutional Neural Network

提出了一种基于卷积神经网络(CNN)的单类分类方法。其思想是使用潜在空间中的零中心高斯噪声作为伪负类,并使用交叉点损失来训练网络,以学习给定类的良好表示和决策边界。该方法的一个重要特点是,任何预先训练好的CNN都可以作为一个类分类的基本网络。本文提出的One Class CNN(OC-CNN)在UMDAA-02 Face,Abariity1001,FounderType-200数据集上进行了评估。这些数据集涉及各种单类应用问题,如用户身份验证、异常检测和新颖性检测。...

chumingqian的博客 4300

iOS基础---OC runtime篇一之基本概念

OC的runtime是基于C语言实现的objective-C 的动态运行时机制,是iOS开发者最基础的知识,虽然互联网上相关的介绍多如牛毛,但是这种最基础的机制,每个开发者都需要有自己的理解与整理。 基本概念 第一、struct和union 由于runtime是基于C实现的,里面有大量的C预研数据结构,如果对C语言不太熟悉,理解起来未免费劲。所以,这里首先需要搞清楚这两个概念: struc...

u012413955的博客 507

【iOS】源码学习-类与对象底层原理

这里简单了解下类结构,iOS类的结构分析笔者将单独写一篇博客总结。

2401_87841908的博客 570

【OC底层】OC对象本质,如 isa, super-class

Objective-C的本质 1、我们编写的Objective-C,底层现实都是C/C++,代码生成步骤如下: 2、在OC中的所有面向对象的实现,都是基于C/C++的数据结构实现的 3、将Objective-C代码转换为C\C++代码   xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc OC源文件 -o 输出...

weixin_34150503的博客 120
上一篇: 6 OC中 isa 和 superclass 的总结
下一篇: 8 iOS中KVO 的本质
Leonardo_Fibonacci
博客等级 码龄10年 110粉丝 247原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值