iOS开发-1.Objective-C&OC对象的本质

VLOOKUP_fixed.py 立即下载
  • 1.我们平时编写的Objective-C代码,底层实现其实都是C\C++代码
a) 所以Objective-C的面向对象都是基于C\C++的数据结构实现的

请添加图片描述

  • 2.Objective-C的对象类主要是基于C\C++的什么数据结构实现的?
a) 结构体
  • 3.将Objective-C代码转换为C\C++代码
a) clang -rewrite-objc main.m -o main.cpp

b) 建议不要按照该上面的方式转换,编辑器将OC代码转成C++代码 依赖如下:
    1) 什么平台的代码
    2) 不同平台支持的代码肯定是不一样的(Windows、Mac、iOS)
    3) 最终C++代码是要转成汇编的,汇编代码是严重依赖硬件的(模拟器(i386)、32bit(armv7)、64bit(arm64))
    4) 如果需要链接其他框架,使用-framework参数。比如-framework UIKit

c) xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc OC源文件 -o 输出的CPP文件
  • 4.一个NSObject对象占用多少内存?
//TODO: 解读:创建一个NSObject对象,在内存中分配一段存储空间给这个NSObject对象,在用一个obj的指针指向这个对象
NSObject *obj = [[NSObject alloc] init];

那么对于对上面代码的解读就变成了这个指针所指向的内存存储空间有多大?

a) 系统分配了16个字节给NSObject对象(通过malloc_size函数获得)

b) 但NSObject对象只使用了8个字节的空间(64bit环境下,可通过class_getInstanceSize函数获得)
  • 5.一个OC对象在内存中是如何布局的?
a) NSObject的底层实现
@interface NSObject {
    Class isa;
};
@end

// NSObject Implementation
struct NSObject_IMPL {
    Class isa;
};
b) Class是什么呢?
    1) typedef struct objc_class *Class; // 指向结构体的指针

    2) isa在内存中的地址就是结构体的地址
c) 那么指针所占所少内存?
8个字节(64bit)/4个字节(32bit)
d)
class_getInstanceSize([NSObject class]) // 获得NSObject实例对象的成员变量所占用的大小 ==> 8
e)
malloc_size((__bridge const void *)obj) // 获得obj指针所指向内存的大小 ==> 16
  • 6.底层原理验证方式?
a) OC底层实现开源地址 // opensource.apple.com/tarballs

b) CoreFoundation内部规定最少分配16个字节

c) 可通过Xcode自带的工具Debug --> Debug Workflow --> View Memory (Shift+Command+M)
读取数据的方式,牵扯到大端 / 小端 iOS是小端模式,会从高地址开始读取,地址值比较大的地方

d) 也可以通过LLDB(动态调试器)指令
p : print(打印)
po : print object(打印对象)
memory read : 读取内存
x/数量、格式、字节数 内存地址
格式:
x是16进制,f是浮点,d是10进制
字节大小:
b:byte 1字节,h:half word 2字节
w:word 4字节,g:giant word 8字节
memory write:修改内存中的值(memory write 内存地址 数值)

e) 1个16进制位代表4个2进制位,2个16进制位代表8个2进制位,即一个字节
  • 7.2个容易混淆的函数
a) 创建一个实例对象,至少需要多少内存?
#import <objc/runtime.h>
class_getInstanceSize([NSObject class]); // 返回的是内存对齐过后的成员变量的大小

b) 创建一个实例对象,实际分配了多少内存?
#import <malloc/malloc.h>
malloc_size((__bridge const void *)obj);
  • 8.一个Person对象,一个Student对象占用多少内存空间?
    请添加图片描述
a) Person底层的实现
struct NSObject_IMPL {
    Class isa; // 8个字节
}

struct Person_IMPL {
    struct NSObject_IMPL NSObject_IVARS; // 8个字节
    int _age; // 4个字节
} // 16 内存对齐:结构体的最终大小必须是最大成员内存大小的倍数,

struct Student_IMPL {
    struct Person_IMPL Person_IVARS; // 16
    int _no;
} // 16 
b) Student底层的实现
struct NSObject_IMPL {
    Class isa; // 8个字节
}

struct Student_IMPL {
    struct NSObject_IMPL NSObject_IVARS;
    int _no;
    int _age;
}
==>
struct Student_IMPL {
    Class isa; // 0x100400110
    int _no; // 0x100400118
    int _age; // 0x10040011C
}

c) 那么stu的地址值是那个呢?
    1) 结构体首元素的地址值:0x100400110
就像数组的地址值就是数组首元素的地址值

d) 将stu指针转成底层实现的指针形式
    1) struct Student_IMPL *stuImpl =  (__bridge struct Student_IMPL *)stu;
再通过结构体指针去访问成员变量
NSLog(@"no is %d, age is %d", stuImpl->_no,stuImpl->_age);
  • 9.思考题
a) 成员变量
    1) @interface Person : NSObject
{
    int _age; // 成员变量每个对象都有一份
}

b) 属性
    1) @property (nonatomic, assign) int height; // 增加一条属性 会生成getter&setter方法不会存在alloc出来的实例对象里面,他只需要一份就够了,放在类对象的方法列表里面
    
c) 多加一条属性的内存大小
    1) struct Person_IMPL {
    struct NSObject_IMPL NSObject_IVARS; // 8个字节
    int _age; // 4个字节
    int _height; // 4个字节
    int _no; // 4个字节
}
    2) sizeOf ==> 24 // 运算符在程序编译的过程中就会确定变成一个常数,不存在函数的调用
    
    3) class_getInstanceSize ==> 24 // 函数 在程序运行过程中
    
    4) mallocSize ==> 32 // 实际分配了多少内存
    
    5) 总结:我只需要24,但是实际返回了32,mallocSize实际调用calloc,结论:操作系统分配内存的时候也有对齐的概念,他会分配好,方便cpu更好的访问和管理Buckets size分配好,堆空间的内存管理,nano的分配方式最大1块是256,在iOS里面他返回的都是16的倍数;
    
    6) gnu的全称是gnu not unix not unix 开源组织 // 无论gnu还是苹果官方的做法分配内存对齐返回的都是16
YOLO26算法心电图十二导联目标检测+训练好的模型+368张数据集+pyqt可视化界面.zip 附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[导联I(I), 导联II(II), 导联III(III), 胸导联V1(V1), 胸导联V2(V2), 胸导联V3(V3), 胸导联V4(V4), 胸导联V5(V5), 胸导联V6(V6), 加压肢体导联aVF(aVF), 加压肢体导联aVL(aVL), 加压肢体导联aVR(aVR)] · 训练集:313 张 · 验证集:37 张 · 测试集:18 张 · 总计:368 张 该数据集聚焦于临床心电图信号的精准识别与定位,其核心检测目标为标准12导联心电图中的各个独立导联波形区域,涵盖肢体导联(I、II、III)与加压肢体导联(aVR、aVL、aVF),以及胸前导联(V1至V6),适用于心电图自动分析系统中对各导联位置的快速准确标注与分类。数据采集场景真实还原了医院心电图室或急诊监护环境下的标准心电图记录纸,波形清晰、基线稳定,具有高度临床参考价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 57 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9708** mAP50-95 | 0.6344 Precision | 0.8990 Recall | 0.9191 train/box_loss | 1.2231 train/cls_loss | 0.9703 val/box_loss | 1.2779 val/cls_loss | 0.... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。 立即下载

相关推荐

企业级AI助手平台 开箱即用的全栈AI平台,支持多智能体协同、Supervisor模式编排、多种决策模式、RAG技术和流程编排能力 支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化

企业级AI应用开发框架,支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化能力,提供可视化流程编排、自主决策智能体与多智能体协同调度,兼容主流 Agent Skill 协议,帮助企业与开发者零门槛快速构建安全、高效、可落地的AI智能体应用与行业解决方案。

iOS开发-蓝牙4.0Demo展示

// //  LeDiscovery.h //  JK_xuXuKou // //  Created by vita on 15/8/25. //  Copyright (c) 2015年 ZZ_Macpro. All rights reserved. //   #import &lt;Foundation/Foundation.h&gt; #import &lt;CoreBlu...

ZZ_iOSdeveloper的博客 2831

基于动态窗口法DWA的机器人路径规划研究(Matlab代码实现)

内容概要:本文系统研究了基于动态窗口法(DWA)的机器人局部路径规划算法,深入剖析其在动态环境中实现自主避障与实时轨迹优化的核心机制。文章详细阐述了DWA算法的速度空间采样策略、轨迹预测模型、动力学约束处理及多目标代价函数的设计原理,并通过构建完整的Matlab仿真框架验证算法有效性。结合典型场景的仿真实验,展示了机器人在复杂障碍物环境下如何实时生成安全、平滑且符合运动学约束的最优路径,充分体现了DWA在移动机器人导航中的实用性与鲁棒性。; 适合人群:具备机器人运动规划基础知识和Matlab编程能力,从事智能移动机器人、自动驾驶或服务机器人研发的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解DWA算法的理论基础与实现细节;②掌握机器人局部路径规划的仿真实现方法;③为实际机器人系统的导航模块开发提供可复用的算法原型与代码参考;④作为进一步研究高级导航算法(如TEB、MPC)的技术基础。; 阅读建议:建议结合提供的Matlab代码逐模块分析与调试,重点关注速度采样、轨迹积分、障碍物距离计算及代价评估等关键环节,通过调整参数在不同地图环境中进行对比实验,以深刻把握算法性能与参数之间的关系,进而提升对实时路径规划系统设计的理解与应用能力。

iOS开发-技术知识盘点&总结(一)

  1&gt; 主界面上下水波动态显示 http://code4app.qiniudn.com/   2&gt; 导入音乐铃声 根据MJAutoTool 实现   3&gt; 语言本地化通过2个string文件实现 (在plist文件中完成NSLocation加载语言本地化) NSLocalizedString(@"本地化",nil)   4&gt; 铃声的处理用 [NSUserD...

ZZ_iOSdeveloper的博客 2730

Argoverse轨迹预测实战:从数据加载到地图API应用全解析

本文详细解析了Argoverse数据集在轨迹预测中的应用,从数据加载到地图API的实战技巧全涵盖。通过具体代码示例展示如何高效处理轨迹数据、实现可视化及基础预测模型,帮助开发者快速掌握自动驾驶轨迹预测的核心技术。特别介绍了Argoverse地图API的深度应用和性能优化经验。

weixin_29182481的博客 241

别再死记公式了!用HFSS/CST手把手教你仿真一个2.4GHz WiFi的PIFA天线(附参数调试技巧)

本文详细介绍了使用HFSS和CST仿真软件设计2.4GHz WiFi PIFA天线的全流程,包括建模准备、分步操作指南和参数调试技巧。通过可视化结果和实战案例,帮助工程师快速掌握天线设计的关键参数优化方法,提升辐射性能和工作效率。

weixin_31682031的博客 331

iOS开发-技术知识盘点&总结(二)

1&gt; UINavgationController使用 导航控制器之间切换供用一块导航条! 导航条的内容由栈定控制器决定! 显示在我们眼前的永远是栈顶控制器! 左上角的返回按钮文字是特例由上一个控制器决定!   2&gt; Storyboard 显示调整 改成横屏显示 // http://www.cocoachina.com/bbs/read.php?tid=167607 Sto...

ZZ_iOSdeveloper的博客 2247

Ubuntu 24.04 + RTX 5090 部署 OpenVLA-OFT:从环境配置到机器人任务评估实战

本文详细记录了在Ubuntu 24.04 LTS系统上,为全新RTX 5090显卡配置CUDA 12.8+与PyTorch 2.7.1+开发环境,并成功部署OpenVLA-OFT视觉语言模型进行机器人任务评估的完整实战流程。文章重点解决了驱动安装、依赖版本冲突、路径设置等核心难题,为在最新硬件上运行先进AI机器人模型提供了可靠的避坑指南和性能观察。

n8m7b6v5c4的博客 594

iOS开发-10.多线程

1.iOS中的常见多线程方案 2.GCD的常用函数 3.GCD的队列 4.容易混淆的术语 5.各种队列的执行效果 6.队列组的使用 7.多线程的安全隐患 8.iOS中的线程同步方案 9.iOS线程同步方案性能比较 10.自旋锁、互斥锁比较 11.atomic 12.iOS中的读写安全方案 13.GNUstep 14.其它知识点总结

ZZ_iOSdeveloper的博客 1787

非华为电脑与MatePad Pro多屏协同实战:从安装管家到攻克连接难题

本文详细介绍了在非华为电脑上安装华为电脑管家并实现与MatePad Pro多屏协同的完整指南。从安装步骤、常见连接失败解决方案到华为账号绑定技巧,提供了实用的操作方法和硬件优化建议,帮助用户攻克连接难题,提升多屏协同的稳定性和流畅度。

weixin_30263073的博客 233

【2026年得物春招算法岗- 4月18日 -第二题- 老张爬山】(题目+思路+Java&C++&Python解析+在线测试)

这篇文章介绍了一个动态规划问题,解决老张在n天内安排爬山计划以最大化愉悦值的问题。题目允许最多k次打破"不能连续两天爬山"的规则限制。 摘要要点: 使用三维动态规划数组dp[i][j][s],表示第i天结束时已用j次机会、当天状态为s(0不爬/1爬)时的最大愉悦值 状态转移考虑两种情况:当天不爬山时取前一天两种状态的最大值;当天爬山时分别处理前一天不爬山和爬山(需消耗机会)的情况 最终结果为考虑所有可能用掉的k次机会后,最后一天两种状态的最大值 提供了Python、Java和C++三种实

m0_73659489的博客 1357

iOS开发-本地通知设置铃声&图标&启动图片

#pragma mark --------- 这里直接在APPDelegate中实现 &lt;img src="http://img.blog.csdn.net/20151030171150310?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolv...

ZZ_iOSdeveloper的博客 1365

在 SAP BTP ABAP 环境里直连 ABAP On-Premise OData

摘要 SAP BTP ABAP Environment 2311版本后,OData集成链路迎来重大改进:Service Consumption Model升级为v2版本,通过压缩模型到单一类减少对象数量;通信管理推荐采用Communication Arrangement替代传统Destination,提供更清晰的治理边界。新版支持同时生成OData v2/v4消费模型,并通过标准工厂类创建代理。配置需关注四层对象:Outbound Service声明协议入口,Scenario定义认证方式,System描述通

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1918

iOS开发-JS与原生OC互相调用之问题总结一

近期由于工作和个人的闲置没有及时的更新博客,为此对各位同学表示抱歉,那么废话不多说,今天我们就聊聊那些在iOS中JS与原生OC互相调用,直接上代码资料~   #pragma mark - JS中的一些细节 1&gt; JS中自定义的URL,在被拦截到的时候url scheme会全部转成小写! 2&gt; html中需要设置编码,否则中文参数可能会出现编码问题! 3&gt; JS打开一个i...

ZZ_iOSdeveloper的博客 841

鸿蒙开发实战项目(四十七):图片编辑(ArkTS)

本篇Codelab主要介绍如何基于图片编解码,实现图片编辑。图片的解码。使用PixelMap进行图片编辑,如裁剪、旋转、亮度、透明度、饱和度等。图片的编码。

斌擎科技 1584

从后端角度浅谈抗辐射设计----三模冗余(TMR)

三模冗余设计(TMR),是最常用的一种容错技术,三个模块采取相同的操作,以多数相同的输出作为表决系统的正确输出,即3取2,因为三个模块是相互独立的,而其中两个模块同时出错的概率是极小的,因此便可保证系统输出的可信度。然而这个设计也会存在面积浪费,功耗的增加,而且由于是冗余的设计,在后续进行综合或者pr的时候会被工具优化,因此需要对模块进行don’t touch设置;通过增值表得到,逻辑关系表达式为:Q=(Q1&Q2)|(Q1&Q3)|(Q2&Q3),通过工艺库的stdcell进行搭建,得到如下电路。

芯冰乐 327

iOS开发-3.isa指针&superclass指针

1.对象的isa指针指向那里? 2.class对象的superclass指针 3.meta-class对象的superclass指针 4.isa&superclass总结 5.isa指针地址&superclass指针地址问题 6.struct objc_class的结构 7.OC对象不同分类存放那些信息?

ZZ_iOSdeveloper的博客 774

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

iOS开发-4.KVO

1.什么是KVO? 2.未使用KVO监听的对象 3.使用了KVO监听的对象 4.查看_NSSet*AndNotify的存在 5._NSSet*ValueAndNotify的内部实现 6.iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?) 7.如何手动触发KVO 8.直接修改成员变量会触发KVO么? 9.KVO的效率高还是代理的效率高? 10.如何验证确实执行的是_NSSet*AndNotify函数? 11.如何验证NSKVONotifying_类名其他的方法?

ZZ_iOSdeveloper的博客 764

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

蓝牙模块HM-10手册

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

iOS开发-8.Runtime

1.Objective-C中的Runtime a) Objective-C是一门动态性比较强的编程语言,跟C、C++等语言有着很大的不同 1) C、C++都是 编写代码-->编译连接-->运行 2) 而OC则可以在运行的时候动态的去修改,例如动态的去调用自身类或者其他类的方法,或者增加、交换方法的实现 b) Objective-C的动态性是由Runtime API来支撑的 c) Runtime API提供的接口基本都是C语言的,源码由C\C++\汇编语言编写 .

ZZ_iOSdeveloper的博客 755

iOS开发-2.OC对象的分类

1.OC对象的分类 2.instance对象(实例对象) 3.obj对象调用copy方法是不是返回的同一个对象? 4.class对象(类对象) 5.meta-class对象(元类对象) 6.几个方法的区别

ZZ_iOSdeveloper的博客 719

iOS开发-Xcode6之后增加pch文件并且常用设置属性

// //  ZZ_APP主流框架-Prefix.pch //  ZZ_APP主流框架 // //  Created by ZZ_Macpro on 15/9/25. //  Copyright (c) 2015年 ZZ_Macpro. All rights reserved. //     #import &lt;Availability.h&gt;   #ifndef _...

ZZ_iOSdeveloper的博客 709

iOS开发-屏幕适配之Autolayout&VFL&Masonry

本文我将为各位同学提到 屏幕适配的发展历史 什么是适配? 什么是Autolayout? 使用代码实现Autolayout的方法 VFL实现Autolayout的方法 Masonry(第三方库)实现Autolayout的方法 那么废话不多说,直接上代码! 屏幕适配的发展历史 iPhone3GS\iPhone4 没有屏幕适配可言 全部用frame、bounds、center进行布局 很多

ZZ_iOSdeveloper的博客 624

iOS开发-Quartz 2D简介(一)

什么是Quartz2D? Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D的API是纯C语言的来自于Core Graphics框架数据类型和函数都是以CG为前缀 CGContextRef\CGPathRef\CGContextStrokePath(ctx)   Quartz 2D能完成的工作 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 ...

ZZ_iOSdeveloper的博客 614

iOS开发-Quartz 2D中UIImage的分类

// //  UIImage+ZZ.h //  Quartz 2D高级用法 // //  Created by 周昭 on 16/4/8. //  Copyright © 2016年 Jordan Zhou. All rights reserved. //   #import &lt;UIKit/UIKit.h&gt;   @interface UIImage (ZZ) /*...

ZZ_iOSdeveloper的博客 610

Objective-C 老项目怎么在 VS Code 里开发?KXApp 的补全、断点与真机调试

这篇讲 Objective-C 老项目怎么在 VS Code 里用 KXApp 开发:纯 OC、OC+Swift 混编、C/C++ 底层代码、CocoaPods 依赖四类工程分别怎么处理补全和索引,断点、条件断点、lldb 控制台和 App 输出怎么看,clangd 冲突怎么解决,以及和 Xcode、Storyboard、Instruments 的分工边界。

2501_91591841的博客 367
上一篇: iOS开发-单例(粒)模式的介绍和实战使用
下一篇: iOS开发-2.OC对象的分类
ZZ_iOSDeveloper
博客等级 码龄11年 21粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值