object-c难以理解的一些概念

图解C#-类型预定义与自定义、C与C#的区别、堆和栈的概念 时间:上午十一点 参考资料:图解C# 笔记标题:预定义数据类型与成员类别 笔记内容:我先是写了一个笔记,如图所示。先是讲解的数据类型,然后讲解成员类别,讲完成员类别后又去讲数据类型。成员类别分为两类,数据成员和函数成员。数据成员用来保存对象需要的数据,函数成员执行代码,定义类型的行为。这些不用多说,任何程序语言皆是如此。 C#中有16种预定义类型。3种非简单类型,13种简单类型。它们都是预定义数据类型。非简单类型有object,string,dynamic。简单类型有非数值类型和数值类型,非数. 阅读详情

 

1.object-c 怎么实现多态

  答:多态是在runtime里面实现的,在编译的时候,compiler把所有class的定义都存放在class 实例对象里面,class实例对象包含了class的父class 实例对象的地址,class方法的select id和地址, class变量的偏移等。所有new出来的object都是从NSObject继承过来的,所以所有对象都自动包含了一个isa的指针,这个指针在调用alloc为object分配地址的时候被指向class对象的地址,在运行的时候,我们调用class 方法是通过给object发送消息

  [myobj method]这样的形式,但编译器会把这句话替换成 id objc_msgSend(id theReceiver, SEL theSelector, ...)第一个参数就是myobj,第二个参数是"method"这个字符串经过编码以后得到的唯一值,apple在runtime的时候查找method都是用selector来做的,这样效率会比字符串比较的效率要高。objc_msgSend这个函数的执行过程大概就是,从thereceiver(也就是myobj)里面得到isa的地址,这个地址指向前面讲到的编译器生成的class的object实例的地址(具体的结构请参考The Objective-C Programming Language),然后比较方法的selector如果找到了,就知道了method的地址,就直接调用了。 

  2.对象的method是怎么访问对象 变量的?答:在编译期间,编译器可以知道指定class的所有继承关系,所以它也知道要生成的object包含的所有变量(包含了父类的)。这样它就能算出所有变量相对于oject的首地址的偏移。在运行的时候,我们这样调用object 的方法:[myobj method]; 

  实际上编译器会隐含的把myobj的地址传递给method,所谓第一个参数(这个就是隐含参数的概念,请参考apple object c的文档)这样知道了object的首地址和变量的偏移,也就知道了变量的地址。 

  3。self和super关键字是怎么实现的?答:这个是面对对象语言容易出错的地方,必须要理解这两个关键字的实现原理才能掌握他们的正确使用方法,请参考apple object c文档中举的例子来了解为什么非常容易出错。上面我们提到了method在被调用的时候,会被传入隐含参数,第一个隐含参数就是object的地址,self实际上在编译期间被替换成了ojbect的地址,所以堆self发送的消息都是根标准流程一样通过isa链找到method来执行。super就不一样,super关键字被编译器替换成了id objc_msgSendSuper(struct objc_super *super, SEL op, ...)其中objc_super的结构是struct objc_super 

{ id receiver; 

Class class; 

  }; 注意到 objc_msgSendSuper 和 id objc_msgSend(id theReceiver, SEL theSelector, ...)的区别,多了一个Class class;class实际上就指向了找到当前method的class 对象的实例。所以在objc_msgSendSuper中查找方法是从参数class指向的class 实例对象的isa开始查找的,而不是从theReceiver也就是myobj这个对象的isa开始查找的

 

Object-C一日速成——基础知识 现在是北京时间2:33pm,今天是只有一节早课的一天,所以我坐在咖啡馆,悠闲又自在。搭建了一上午的环境后,我终于要开始写作业喽~ 文章目录一、第二章实验报告1.1实验目的1.2实验要求1.3 实验内容二、第五章实验报告2.1 实验目标2.2 实验要求2.3 实验内容三、第六章实验报告3.1实验目的3.2实验要求3.3 实验内容四、第七章实验报告7.1实验目的7.2实验要求7.3 实验内容五、第... 阅读详情

相关推荐

基于CANoe的车载以太网测试

以太网测试 CANoe

Yafet 4553

Object-C难以理解的一些概念

Object-C难以理解的一些概念 1.object-c 怎么实现多态 答:多态是在runtime里面实现的,在编译的时候,compiler把所有class的定义都存放在class 实例对象里面,class实例对象包含了class的父class 实例对象的地址,class方法的select id和地址, class变量的偏移等。所有new出来的object都是从NSObject继承过来

quasiceo 608

游戏脚本开发避坑:Python调用OP模块实现阴阳师后台操作的5个关键点

本文深入探讨了使用Python调用OP模块开发《阴阳师》后台自动化脚本的5个核心避坑点。重点解析了窗口绑定、后台截图与图像识别、鼠标键盘模拟、脚本稳定性以及性能优化等关键环节的常见问题与实战解决方案,帮助开发者高效实现稳定的游戏后台挂机功能。

u0v1w2x3的博客 588

对于新手来说,Python 中有哪些难以理解的概念

对于新手来说,Python 中有哪些难以理解的概念 对于新手来说,可能还处于学习的最初阶段,热火朝天的撸袖子写代码,可能还用不上什么装饰器、元类之类的概念,我觉的应该是下面这些: tab和空格缩进的区别 python的代码块和C++/Java等不同,python不使用花括号来限制代码块的范围,而是使用缩进来限制代码块的范围。 而在缩进的选项上,供程序员选择的有使用tab缩进或者使用空格缩...

weixin_44487583的博客 242

Wireshark 4.6 TCP 流图解析:3种拥塞控制算法可视化对比

本文深入解析Wireshark 4.6的TCP流图功能,通过可视化对比Reno、Cubic和BBR三种主流拥塞控制算法的性能特征。文章提供详细的实验环境搭建方法、流图分析工具使用技巧,以及算法调优建议,帮助网络工程师优化TCP性能。

weixin_29291573的博客 446

Ubuntu零基础教学-如何把Ubuntu20.04界面从英文修改为中文?| 超级详细,建议收藏

带你如何把Ubuntu20.04界面从英文修改为中文?| 超级详细,建议收藏

**My Coding Family** 5340

对于新手来说,Python 中有哪些难以理解的概念?

老手都是从新手一路过来的,提起Python中难以理解的概念,可能很多人对于Python变量赋值的机制有些疑惑,不过对于习惯于求根究底的程序员,只有深入理解了某个事物本质,掌握了它的客观规律,才能得心应手、运用自如,进阶更高层次来看待这个事物,此刻“庖丁解牛”这个成语能够贴切表达这个意思,你看见的是整头的牛,而我看见的是牛的内部肌理筋骨,就是这个状态!!! 那么为什么P...

python学习者的博客 615

使用R语言获取data.frame中指定列的数据

这里以"df"为例,包含三列数据:“列1”、“列2"和"列3”。通过以上代码,我们成功获取了"列1"和"列3"的数据,并将它们分别存储在了变量"column1"和"column3"中。假设我们有一个名为"df"的data.frame,其中包含了多个列,我们想要提取其中的某一列。符号,我们可以从data.frame中提取出"列2"的数据,并将其赋值给变量"column2"。符号,我们可以轻松提取出data.frame中特定列的数据,并将其存储在变量中供进一步的分析和处理使用。假设我们要获取"列2"的数据。

DevRevolt的博客 2321

对于新手来说,Python中有哪些难以理解的概念?

老手都是从新手一路走过来的 ,很多新手伙伴可能会对一些基础的概念理解都存在一定的困难,提起Python中难以理解的概念,很多伙伴对于 Python变量赋值的机制 有些疑惑,不过对于习惯于求根究底的程序员...

cpfsdzs2014的博客 124

【拼多多笔试题汇总】2024-03-24-拼多多春招笔试题

A 小镇上有个奇特的游戏。游戏开始时,A 先生准备了一排 nnn 个物品。K 小姐和卢小姐则轮流进行操作。首先,K 小姐可以选择移除至多 xxx 个物品。接着,卢小姐也可以选择移除剩余物品中的至多 yyy 个。游戏的目标是,K 小姐想尽量让剩余物品的价值之和最大化,而卢小姐则想将剩余物品的价值之和最小化。假设两人都采取最优策略,请问最后剩余物品的价值之和是多少?第一行包含五个正整数 n,m,k,x,yn, m, k, x, yn,m,k,x,y,分别表示物品的总数、K 小姐最多可移除的物品数、卢小姐最多可移

春秋招笔试突围 1万+

零基础实战:云开发家政维修小程序搭建指南

欢迎来到这本关于构建家政维修小程序的电子书!在当今数字化的浪潮中,线上服务已成为我们生活中不可或缺的一部分。从点餐购物到居家维修,人们越来越习惯通过指尖轻点来解决各种需求。正是基于这样的背景,我们希望通过这个系列,手把手地带领大家从零开始,搭建一个功能完备、体验流畅的家政维修平台。这不仅仅是一本技术教程,更是一次将想法变为现实的探索之旅。我们将深入浅出地讲解如何运用云开发等现代技术,实现从用户下单、支付,到客服派单、工人接单,再到订单完成和权限管理等一系列核心业务流程。

低代码布道师的博客 3431

新手难点解析——传说中Python难以理解的概念整理

比如上面 i 的类型是 int 类型,s 类型是字符串类型,nums 的类型是列表类型,dicts 的类型是字典类型,它们都是由对应的类型构建出来的。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。对象的第二个属性是值,值很好理解,比如 i 的值是 10,s 的值是 abc,nums 的值就是 1,2,3。而不可变类型的变量赋值时,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象。

Trb201013的博客 653

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Object-C语法轻松剖析

我们在苹果开发中,总会看到XCode,Interface Builder,Object-c这如此入耳入随的单词,但往往多数人在认为XCODE看着简单,InterfaceBuilder好似操作, 而Object-c却望而生畏,如果作为我们只想需要初学才见的话,理解了它的语法,或者你已经懂了相关如,JAVA,或者C#,或者C,C++等语言的开发后,你会觉得任何一门语言, 熟悉它的语法那是必须的,了

android应用开发详解 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Python】深度理解Class类、Object类、Type元类的概念和关系

object和type的产生本身就是一种自然抽象。其实从汇编、C、面向过程、面向对象这一路演化都是为了抽象,包括造轮子,语言生态,其实都是抽象的具体表现。那么殊途同归,从硬件到软件一路走来,所有动作都是抽象,它不是创造,而是优化,但某些优化趋近于创造。软件设计思想,其实都是从自然、人文等关系演化类比而来。软件思想就是一方世界,是自然的产生,是真实世界的映射,它和我们一样,在进步、在进化,与我们并肩前行。

扶摇直上 6650

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

对python的理解_对于新手来说,Python 中有哪些难以理解的概念?

老手都是从新手一路过来的,提起Python中难以理解的概念,可能很多人对于Python变量赋值的机制有些疑惑,不过对于习惯于求根究底的程序员,只有深入理解了某个事物本质,掌握了它的客观规律,才能得心应手、运用自如,进阶更高层次来看待这个事物,此刻“庖丁解牛”这个成语能够贴切表达这个意思,你看见的是整头的牛,而我看见的是牛的内部肌理筋骨,就是这个状态!!!那么为什么Python变量赋值的机制难以理解...

weixin_39658759的博客 181

python哪里最难理解_对于新手来说,Python 中有哪些难以理解的概念?

老手都是从新手一路过来的,提起Python中难以理解的概念,可能很多人对于Python变量赋值的机制有些疑惑,不过对于习惯于求根究底的程序员,只有深入理解了某个事物本质,掌握了它的客观规律,才能得心应手、运用自如,进阶更高层次来看待这个事物此刻“庖丁解牛”这个成语能够贴切表达这个意思,你看见的是整头的牛,而我看见的是牛的内部肌理筋骨,就是这个状态!!!那么为什么Python变量赋值的机制难以理解呢...

weixin_36298146的博客 199

Object-c的基础概念(一)

下文为阅读笔记。 一:Object-c的类基本定义 1. 类定义在@interface和@end之间。 2.MyClass:NSObject的方式定义子类和父类。 3.{}中定义类的对象成员 4.-/+定义的是方法,-定义的是对象的方法,+定义的是类的方法。对象是类的一个实例。对于对象的方法,也即是,当使用该方法之前必须先生成该类的一个特定对象。 二:强类型和弱类型的...

GJQI12的专栏 401

Object-C 中的Selector 概念

Object-C 中的Selector 概念、、、、 https://www.cnblogs.com/geek6/p/4106199.html 博客园 首页 新随笔 联系 订阅 管理 随笔 - 135 文章 - 79 评论 - 16 Object-C 中的Selector 概念 selector可以叫做选择器,其实指的就是对象的方法,也可以理解为C语言里面的函数指针,在面向对象里面的对应概念。 @selector(xxxx)的作用是找到名字为xxxx的方法。一般用于[a per...

kuangben2000的博客 579
上一篇: 关于BeginSheet 的窗口问题
下一篇: 新手学会使用Cocoa帮助文档
sheltonwan
博客等级 码龄20年 77粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值