OC 对象和函数】的更多相关文章

#import <Foundation/Foundation.h> @interface Car : NSObject {// 成员变量 @public int wheels; int speed; } - (void)run; @end @implementation Car - (void)run { NSLog(@"%d个轮子,速度为%dkm/h的车子跑起来", wheels, speed); } @end void test(int w, int s) { w =…
一 建立一个OC的类 完整的写一个函数:需要函数的声明和定义. 完整的写一个类:需要类的声明和实现. 1.类的声明 声明对象的属性和行为 #import <Foundation/Foundation.h> @interface Car : NSObject { @public int speed;//速度 int wheels;//轮子 } - (void) initSpeed:(int)speed withWheels:(int) wheels ; - (void) run; @end 第3…
类定义 1 OC类分为2个文件,一个是.h文件,一个是.m文件: 2 .h文件存放类.函数声明: 3 .m文件类的具体实现: 4 类声明使用关键字@interface.@end来声明: 5 类实现使用关键字@implementation.@end来实现: 创建/销毁OC对象 a 创建对象 Cat* cat = [Cat alloc]; b 初始化构造函数 [cat init]; c 销毁对象 [dog release];…
在OC中,当像一个对象发送消息,而对象找到消息后,从它的类方法列表,父类方法列表,一直找到根类方法列表都没有找到与这个选择子对应的函数指针.那么这个对象就会触发消息转发机制. OC对象的继承链和isa指针链如图: 消息转发流程如下: 1.先调用实例方法resolveInstanceMethod 如果作者在这里使用runtime动态添加对应的方法,并且返回yes.就万事大吉.对象找到了处理的方法, 并且将这个新增的方法添加到类的方法缓存列表 2.如果上面的方法返回NO的话,对象会调用forward…
OC中NSLog函数输出格式详解 %@ 对象 • %d, %i 整数 • %u 无符整形 • %f 浮点/双字 • %x, %X 二进制整数 • %o 八进制整数 • %zu size_t • %p 指针 • %e 浮点/双字 (科学计算) • %g 浮点/双字 • %s C 字符串 • %.*s Pascal字符串 • %c 字符 • %C unichar • %lld 64位长整数(long long) • %llu 无符64位长整数 • %Lf 64位双字…
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 { Class isa; }; Class是一个指向对象的结构体指针 typedef struct o…
OC对象的本质 平时编写的Object-C代码,底层实现其实都是C/C++代码. 所以Objective-C的面向对象都是基于C/C++的数据结构实现的,OC对象内部可以容纳不同数据类型的数据,因此可以推断OC对象的底层数据结构就是结构体. 为了进一步研究OC对象的本质,我们使用苹果Xcode内置的LLVM编译器前端clang中-rewrite-objc 将我们的OC代码转为C/C++实现. clang -rewrite-objc main.m -o main.cpp 由于不同平台支持的代码肯定…
一.数组的扩展,ES6在数组扩展了一些API,以实现更多的功能 1.Array.from:可以将类数组和可遍历的数据结构转换成真正的数组,如下所示 var a = { '0':1,'1':1,length:2 }; var arr = Array.from(a); console.log(arr) Array [ 1, 1 ] ---------------ES5的实现----------- var arr = [].slice.call(a); console.log(arr) Array […
在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环境下编译器不会自动管理CF对象的内存,所以当我们创建了一个CF对象以后就需要我们使用CFRelease将其手动释放,那么CF和OC相互转化的时候该如何管理内存呢?答案就是我们在需要时可以使用__bridge,__bridge_transfer,__bridge_retained,具体介绍和用法如下…
一.原码分析 1.1 测试代码 为了方便查看拷贝构造函数调用过程,自定义了拷贝构造函数,但啥也没干. class CTEST { public: int m_nData; //Method: public: CTEST() { printf("0x%p CTEST is constructed\n", this); } CTEST(CTEST& oCtest) { printf("0x%p CTEST copy constructor is called, copy…