Objective-C语言的动态性主要体现在以下3个方面 (1)动态类型:运行时确定对象的类型。 (2)动态绑定:运行时确定对象的方法。 ...一、动态类型 动态类型指对象指针类型的动态性,具体地说就是使用id类型将对象的类型推迟到运行时才确定,由赋给它的对象类型决定该对象类型(说起来怎么这么绕口),也就是说id修饰的对象是动态类型对象,其他在编译期指明类型的为静态类型对象...三、动态加载 动态加载分为两部分:动态资源的加载(如:图片资源),代码模块的加载;这些都是在运行时根据需要有选择性的添加到程序中的,是一种代码和资源的“懒加载”模式,这样降低编译时期对内存的开销,提供程序的性能...在消息传递机制中,当开发者编写[receiver message:xxx]语句进行发送消息后,编译器都会将其转换成objc_msgSend C语言的发送格式。...有了这些参数,objc_msgSend就能根据接收者的isa指针,到其对象的方法列表中以sel 的名称寻找对应的方法。
一、NSObject的copy实现 苹果官方文档对copy的描述 NSObject进行拷贝的方法是调用copy方法 newobj = [obj copy] 前提是实现NSCopying协议的copyWithZone...对象的copy可以是浅的或深的。浅拷贝和深拷贝方法都直接copy属性,但不同之处在于它们如何处理指针引用,特别是对对象的引用(例如NSString * str)。...copyWithZone: 消息,如果集合里的对象已经适配了NSCopying协议,那么这些对象的引用就会被拷贝到新的集合里。...然而,copyWithZone: 产生的是一个浅拷贝,这种类型的深拷贝,是指对集合对象的进行深拷贝。集合里的对象依旧是浅拷贝。...,但是集合里的每个对象都是进行的浅拷贝。
因此本篇文章作为简单学习ObjC的记录,不会涉及太深入的语法特性,简而言之就是——够用就行。 什么是Objective-C Objective-C,简称OC,是一种通用、高级、面向对象的编程语言。...现在Objective-C与Swift是OS X和iOS操作系统、及与其相关的API、Cocoa和Cocoa Touch的主要编程语言。 Objective-C是C语言的严格超集。...这意味着任何C语言程序不经修改就可以直接通过Objective-C编译器, 在Objective-C中使用C语言代码也是完全合法的。...Objective-C被描述为盖在C语言上的薄薄一层, 因为Objective-C的原意就是在C语言主体上加入面向对象的特性。OC项目中常用的拓展名如下: 扩展名 内容类型 .h 头文件。...带有这种扩展名的源代码文件,除了可以包含Objective-C和C代码以外还可以包含C++代码。仅在你的Objective-C代码中确实需要使用C++类或者特性的时候才用这种扩展名。
内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面尤其的丰富。...内省是对象揭示自己作为一个运行时对象的详细信息的一种能力。这些详细信息包括对象在继承树上的位置,对象是否遵循特定的协议,以及是否可以响应特定的消息。...1 isKindOfClass:Class 检查对象是否是那个类或者其继承类实例化的对象 1 isMemberOfClass:Class 检查对象是否是那个类但不包括继承类而实例化的对象 示例: Objective-c...3 respondToSelector:selector 检查对象是否包含这个方法 Objective-c代码 - (void)doCommandBySelector:(SEL)aSelector {...Objective-c代码 // ... if (!
Objective-C中的hasPrefix hasPrefix:方法的功能是判断创建的字符串内容是否以某个字符开始,其语法形式如下: -(BOOL)hasPrefix:(NSString*)...该方法的返回值为BOOL,当BOOL为YES或者为1时,则字符串是以某个字符开始;当BOOL为NO或者为0时,则字符串不是以某个字符开始。 ...【示例】以下程序通过使用hasPrefix:方法来判断使用stringWithCString:方法创建的字符串是否以字母B开始,如果是以字母B开始,输出开头为字母B;如果不是,输出开头不为字母B。
id的含义是:指针,并可以指向任意类型的Objective-C对象,e.g.: id delegate 注意:以上声明没有用星号。id已经隐含了星号的作用。...c.如果你不拥有某个对象,但是要使用该对象的时候,可以向其发送release消息或者autorelease消息(release会使retain计数立刻减1。...15.C、C++、Objective-C这类语言的代码文件要经过两步才能完成编译。首先,预处理器(preprocessor)会读入并处理整个文件。...18.在Objective-C中,有三种途径可以实现回调。 a.目标-动作(Target-action):在应用开始等待前,要求“当X发生时,向指定的对象发送某个特定的消息。”...c.对于要触发多个(其它对象中)回调对象(如NSTimeZone),使用通告。 24.回调中的回收处理(防止内存泄露): a.通告中心不拥有其下的观察器。
众说周知,我们平时编写的OC代码,底层都是C/C++实现的 我们可以通过一个终端指令,将我们的OC代码转换成C/C++代码 xcrun -sdk iphoneos clang -arch arm64 -...思考一:OC的对象、类都是基于C/C++什么数据结构实现的??...、类都是基于C/C++当中结构体实现的。...0x102c0a590: 0x000011c9 0x001d8001 0x00000004 0x00000005 还可以通过lldb命令修改对象的值: 类、实例对象、元类(class、instance...在 Objective-C 中,含有一个 isa 指针并且可以正确指向某个类的数据结构,都可以视作为一个对象,其中 isa 指针指向当前对象所属的类,通过苹果开源的官方文档,同样可以发现它的数据结构,如下代码
几何形状”结构 typedef struct{ ShapeType type; ShapeColor fillColor; ShapeRect bounds; }Shape; //返回“枚举颜色”的名称...fillColor = kBlueColor; shapes[2].bounds = rect2; drawShapes(shapes, 3); return (0); } Console窗口的运行结果
The isa pointer of Instance and Class Firstly, let's have a look at the struct o...
一、引用 引用是iOS内存管理中的重要知识点,总所周知,iOS对象的内存管理是使用引用计数来表示的。一个对象只有在它的所有强引用都被释放后才能被回收。因此,一个对象的生命周期取决于其强引用的所有者。...您可能想要引用一个对象而不妨碍对象本身的回收。对于这种情况,您可以获取一个“弱”引用。弱引用是通过存储一个指向对象的指针创建的,而不是保留对象。...函数,初始化一个新的weak指针指向对象的地址。...clearDeallocating函数首先根据对象地址获取所有weak指针地址的数组,然后遍历这个数组把其中的数据设为nil,最后把这个entry从weak表中删除,最后清理对象的记录。...因为对象 A 的销毁依赖于对象 B 销毁,而对象 B 的销毁与依赖于对象 A 的销毁,这样就造成了我们称之为循环引用(Reference Cycle)。
The down low on Objective-C Runtime: The Objective-C Runtime is an open source library written in C...Objective-C的Runtime,是一个用C和汇编写的「开源库」,它为C添加了面向对象的特性,从而成就了Objrctive-C这门语言。...简单点理解,Runtime就是一个C和汇编写的代码库——是Objective-C之所以成为Objective-C的一个库。 用一图以助理解: ?...Runtime概览 另外,可参考: 重识 Objective-C Runtime - Smalltalk 与 C 的融合 Runtime的三个头文件 Runtime这个库是开源的。...; 表示Objective-C中的属性。
OC中调用方法某个对象的消息呦两种方式: #1. performanceSelector: withObject: #2. NSInvocation...., 但只传递2个参数, 这样方法的第三个参数会自动取我们传的第二个的值 [self performSelector:@selector(printStr1:Str2:Str3:) withObject...方法找不到", NSStringFromSelector(aSelector)]; [NSException raise:@"方法调用出现异常" format:info, nil]; } 2、方法的参数个数与外界传进来的参数数组元素个数不符...//此处不能通过遍历参数数组来设置参数,因为外界传进来的参数个数是不可控的 //因此通过numberOfArguments方法获取的参数个数,是包含self和_cmd的,然后比较方法需要的参数和外界传进来的参数个数...,因此可以推断返回值的具体类型
简介 建立在C语言之上,可以混编C/C++代码,编写一个类需要二个文件: .h的头文件 .m的实现文件(如果是C/C++混编文件,文件后缀为.mm) 既然有头文件,所以很多人会拿它与C++进行类比,它最重要的三个特性是...:Message、Category、Protocol,与C++类比,二者之间的不同: 1、它没有new也没有delete,但有类似的方法alloc、dealloc; 2、不支持多继承,只支持单继承,但是提供了...Protocol; 3、它没有命名空间; 4、不支持内联函数; 5、不支持参数默认值; C++太过庞大,所以拿二者比较其实不是特别合适,跟Java相比,我觉得可能更适合一些吧 快速入门 1) 类的定义...3) 基本数据类型 OC建立在C语言之上,所以C中的所有基本数据类型它都支持,比如:int、float、char… OC自身定义的数据类型,都包含在Foundation中了,类名以NS开头,比如:NSArray...、NSInteger、NSNumber,定义:NSString *myStr; 更多关于Objective-C的学习资料,推荐 Ry’s Objective-C Tutorial
Objective-C 的 Runtime 铸就了它动态语言的特性,这些深层次的知识虽然平时写代码用的少一些,但是却是每个 Objc 程序员需要了解的。...而OS X较老的32位程序仍采用 Objective-C 1中的(早期)Legacy 版本的 Runtime 系统。...Objective-C源代码 大部分情况下你就只管写你的Objc代码就行,runtime 系统自动在幕后辛勤劳作着。...在Objective-C Runtime Reference中有对 Runtime 函数的详细文档。...,但我们仍能从中获得一些有价值的信息,有兴趣的可以查看源代码 Objective-C 2.0 的头文件虽然没暴露出objc_class结构体更详细的设计,我们依然可以从Objective-C 1.0 的定义中小窥端倪
Objective-C Runtime 最近在学习Runtime的知识,恰巧发现了这篇博客《Objective-C Runtime》,在此基础上,进行了些许补充说明,如有错误或其他想法,欢迎提出交流。...而OS X较老的32位程序仍采用 Objective-C 1中的(早期)Legacy 版本的 Runtime 系统。...,但我们仍能从中获得一些有价值的信息,有兴趣的可以查看源代码 Objective-C 2.0 的头文件虽然没暴露出objc_class结构体更详细的设计,我们依然可以从Objective-C 1.0 的定义中小窥端倪...参考链接 原文:Objective-C Runtime Apple官方文档:Objective-C Runtime Programming Guide Apple开源代码:Objective-C Runtime...源码 Objective-C runtime之运行时的基本特点 Understanding the Objective-C Runtime 最后,附上Runtime的基本使用:《Objective-C
一、利用class-dump来查看源文件 class-dump是一个逆向工具,可以用来查看未加固的APP的方法名和属性名 安装class-dump 从class-dump下载地址将dmg文件下载下来,将...Users/imac/Desktop/heads 其中/Users/imac/Desktop/Payload/test.app是源文件路径, /Users/imac/Desktop/heads是要导出的头文件的路径...可以在head文件夹里看到包含第三方库的头文件,里面可以看到属性名和方法名 二、混淆代码 在项目里添加两个文件confuse.sh、func.list 在funlist里写上你要混淆的字符串; 在confuse.sh...STRING_SYMBOL_FILE="func.list" HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h" export LC_CTYPE=C...| sqlite3 $SYMBOL_DB_FILE } ramdomString() { openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c
直接遍历数组,取符合条件的对象放到一个新数组效率可能不高。...下面介绍一个更简便的方法来实现 简介 NSPredicate类主要用来指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。...谓词是指在计算机中表示计算真假值的函数。原理和用法都类似于SQL查询中的where,作用相当于数据库的过滤取。主要用于从集合中分拣出符合条件的对象或者数据模型,也可以用于字符串的正则匹配....一般的, NSPredicate的筛选过滤的条件可以是, 逻辑运算符号(> , 的包含/匹配/模糊搜索(BEGINSWITH,ENDSWITH,CONTAINS...NSPredicate创建的过滤条件 [predicate evaluateWithObject:model]; 3.将array通过创建的predicate进行过滤,并返回符合条件的数据 NSArray
在编程语言中是少不了对内存的管理的,内存对于计算机来说是宝贵的资源,所以对使用不到的资源进行回收是很有必要的。...等方法的,需要在XCode中进行设置,设置如下: 把Objective-C Automatic Reference Counting 改为NO,即可。 ...用可变的数组结合着可变的字符串来观察一下retainCount的变化。 ...的变化 用NSString声明的字符串变量的retainCount变化由你初始化字符串时的方式决定 1....FomatRetainCount = 3 2014-08-03 20:18:37.240 Memory[2499:303] 传入的变量RetainCount = 3 Objective-C中得
学习Objective-C的面向对象也有一段时间了,为了犒劳自己的学习成果,写个小怪兽来犒劳一下自己把。在LOL中有怪兽和英雄的角色吧,接下来就先写一个小怪兽的类吧。...从小怪兽的角度来讲,怪兽都有那些行为和属性呢?最重要的两点是小怪兽要打英雄对吧,“攻击英雄”的行为是少不了的,另一个是小怪兽打不过怎么办呢?打不过就跑呗,顺理成章,得有“逃跑”行为吧。...小怪兽在攻击英雄的同时生命力是由变化的,会由一个值变到另一个值,所以得有“当前的生命力”和“原来的生命力”,同时“攻击力”和“防御力”对于小怪兽来说也是必不可少的,移动时得有“当前位置”和“原来位置”。...1 // 2 // Location.m 3 // HelloOC 4 // 5 // Created by ludashi on 14-7-27. 6 // Copyright (c)...通过小怪兽的逻辑希望大家会更好的理解面向对象的思想。
领取专属 10元无门槛券
手把手带您无忧上云