下面详细的介绍Objective-C中的集合类以及每个集合类的用法,学过其他面向对象编程语言的小伙伴们看到OC的集合类会有种莫名的亲切感,理解起来问题不大,可以类比Java中的集合类去学习...在Objective-C中的集合类中主要包括不可变的数组--NSArray, 可变的数组--NSMutableArray, 不可变的字典--NSDictionary, 可变的字典--NSMutableDictionary...NSArray 数组是有序对象的集合,用来存储对象的有序列表,在OC中数组中必须存的是对象,不能是基本数据类型,若想存入基本数据类型,必须先把数据类型转换成对象,然后再存入集合类中...NSArray也是OC中的一个对象,使用NSArray也需要进行实例化,前面的博客在类的初始化中提到了便利初始化函数和便利构造器,在NSArray中也少不了这两样东西我们可以通过NSArray的便利初始化函数或者便利构造器进行...在OC中给我们提供啦一个类专门来把基本数据类型封装成对象,这个类就是NSNumber. 1.
Objective-C中NSArray类的解读 NSArray数组类是Objective-C语言中常用的也是重要的一个类,除了开发中常用到的一些基础功能,NSArray及其相关类中还封装了许多更加强大的功能
其实最主要的表现就是Objective-C将很多静态语言在编译和链接时做的事情放到了运行时去做,它在运行时实现了对类、方法、成员变量、属性等信息的管理机制。...与之对应实现的就是Objective-C的Runtime机制。 Objective-C的Runtime目前有两个版本:Leagcy Runtime和Moden Runtime。...同时,在Objective-C语言中,类本身也是一个对象,类作为对象时isa指针指向元类(Meta Class),后面会详解; super_class:指向该类的父类,如果该类已经是根类(NSObject...中类变量的信息,一般认为Objective-C不支持类变量。...注意,返回的列表不包含父类的成员变量和属性; Objective-C不支持往已存在的类中添加实例变量,因此不管是系统库提供的类,还是我们自定义的类,都无法动态添加成员变量; 当通过运行时来创建一个类的时候
kBlueColor } ShapeColor; //定义“几何形状矩形区域”结构 typedef struct { int x,y,width,height; } ShapeRect; 然后再定义基类Shape...,注意:在obj-C中,定义一个类通常分成二部分,一部分是".h"的文件,用来申明类有哪些成员(也称为类的定义文件,类似于接口),另一部分是".m"的文件,用来提供具体实现 Shape类的申明部分如下:...All rights reserved. // #import "Shape.h" //注:因为Circle类不需要扩展其它方法,所以这里也只要一个空壳 @interface Circle : Shape...bounds.x,bounds.y,bounds.width,bounds.height,[super getColorName:fillColor]); } @end 注:上面展示了在obj-C中如何调用父类的方法...同时我们也看到了,创建一个类的实例用“[类 new]”来完成。 最后附上文件结构图:
说明:这个Objective-C专题,是学习iOS开发的前奏,也为了让有面向对象语言开发经验的程序员,能够快速上手Objective-C。...如果你还没有编程经验,或者对Objective-C、iOS开发不感兴趣,请忽略。学习本专题之前,建议先学习C语言专题。 OC是一门面向对象的语言,因此它也有类、对象、静态\动态方法、成员变量的概念。...一、语法简介 1.类 在Java中,我们用1个.java文件就可以描述清楚一个类;在OC中,一般用2个文件来描述一个类: 1> .h:类的声明文件,用于声明成员变量、方法。...二、用Xcode创建第一个OC的类 1.右击项目文件夹或者文件,选择"New File" ? 2.选择Cocoa的"Objective-C class" ? 3.输入类名和选择父类 ?...* Student.h是类的声明文件,Student.m是类的实现文件 * 默认情况下,这2个文件的文件名跟类名一致 * 编译器只会编译.m文件,并不会编译.h文件 三、第一个类的代码解析 1.Student.h
头文件包含类,类型,函数和常数的声明。 .m 源代码文件。这是典型的源代码文件扩展名,可以包含 Objective-C 和 C 代码。 .mm 源代码文件。...带有这种扩展名的源代码文件,除了可以包含Objective-C和C代码以外还可以包含C++代码。仅在你的Objective-C代码中确实需要使用C++类或者特性的时候才用这种扩展名。...class) 类是面向对象语言中最重要的一个概念,Objective-C同样支持类。...发送给对象的所有消息都会动态分发,这样有利于实现Objective-C类的多态行为。...不过在Objective-C 2.0引入了新的语法以声明变量为属性, 并包含一可选定义以配置访问方法的生成。属性总是为公共的,其目的为提供外部类访问(也可能为只读) 类的内部变量的方法。
Objective-C语言的动态性主要体现在以下3个方面 (1)动态类型:运行时确定对象的类型。 (2)动态绑定:运行时确定对象的方法。 ...若找到对应的方法,就会转到它的实现代码执行,如果找不到,就去父类中寻找,如果找到了根类还是无法找到对应的方法,说明接收者对象无法响应该消息,那么就会触发消息转发机制,给开发者一次补救程序的机会。
如果一个对象的类采用了NSCopying协议并且实现了它的copyWithZone:方法,那么这个对象就可以被拷贝。...如果一个类具有可变和不可变的变体:那么可变类应该采用NSMutableCopying协议(而不是NSCopying)并实现mutableCopyWithZone:方法来确保拷贝的对象保持可变。...四、集合类对象的深拷贝,浅拷贝 部分源自苹果官方文档 1、浅拷贝 When you create a shallow copy, the objects in the original collection...在集合类对象(NSArray、NSDictionary、NSSet)中,对immutable对象进行copy,是指针复制,mutableCopy是内容复制;对mutable对象进行copy和mutableCopy
简介 建立在C语言之上,可以混编C/C++代码,编写一个类需要二个文件: .h的头文件 .m的实现文件(如果是C/C++混编文件,文件后缀为.mm) 既然有头文件,所以很多人会拿它与C++进行类比,它最重要的三个特性是...因为OC不提供命名空间,所以类命名上要特别注意了,不然很容易覆盖/冲突而导致很多未知的问题。...苹果定义的类,一般类名最前面有二个字母,比如NSObject中的NS,UIKit中的UI,所以为了避免跟苹果定义的类产生冲突,自定义的类以三个字母开头,比如BNR这样 2) 方法的定义和调用 ?...方法分二种:实例方法、类方法,如上图所示,区别类方法和实例方法,主要是它的声明符:-、+ + (返回值类型) 类方法名 - (返回值类型) 实例方法名,需要先创建后再使用,比如这样:[[[Hello alloc...、NSInteger、NSNumber,定义:NSString *myStr; 更多关于Objective-C的学习资料,推荐 Ry’s Objective-C Tutorial
先来定义一个Human父类 定义部分: // // Human.h // OOP // // Created by jimmy.yang on 11-2-9. // Copyright 2011...interface Human : NSObject { BOOL sex; } +(void) toString; -(void) showSex; @end 注:+(void)前的加号,就表示这一个是类方法...Human //构造函数 -(id) init { NSLog(@"init() in Human is called"); sex = TRUE; return(self); } //static类方法...All rights reserved. // #import "Woman.h" @implementation Woman //Woman类的构造函数 -(id) init{ NSLog(...; //调用类的“静态”方法 [Human toString]; NSLog(@"----------------"); //创造一个Human的实例 Human *man = [
与Runtime交互 Objc 从三种不同的层级上与 Runtime 系统进行交互,分别是通过 Objective-C 源代码,通过 Foundation 框架的NSObject类定义的方法,通过对 runtime...在Objective-C Runtime Reference中有对 Runtime 函数的详细文档。...,类名,成员变量,方法,缓存,还有附属的协议 PS:OBJC2_UNAVAILABLE之类的宏定义是苹果在 Objc 中对系统运行版本进行约束的黑魔法,为的是兼容非Objective-C 2.0的遗留逻辑...,但我们仍能从中获得一些有价值的信息,有兴趣的可以查看源代码 Objective-C 2.0 的头文件虽然没暴露出objc_class结构体更详细的设计,我们依然可以从Objective-C 1.0 的定义中小窥端倪...而Objective-C Runtime中使用了Non Fragile ivars来避免这个问题 使用Non Fragile ivars时,Runtime会进行检测来调整类中新增的ivar的偏移量。
Objective-C Runtime 最近在学习Runtime的知识,恰巧发现了这篇博客《Objective-C Runtime》,在此基础上,进行了些许补充说明,如有错误或其他想法,欢迎提出交流。...在一些计算机语言的原理中,一个类和元类层次结构可以更自由的组成,更深元类链和从单一的元类继承的更多的实例化的类。Objective-C 的类方法 是使用元类的根本原因,在其他方面试图在隐藏元类。...而Objective-C Runtime中使用了Non Fragile ivars来避免这个问题 使用Non Fragile ivars时,Runtime会进行检测来调整类中新增的ivar的偏移量。...参考链接 原文: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下载地址将dmg文件下载下来,将class-dump复制到/usr/bin目录,并在终端执行下面命令赋予权限
下面介绍一个更简便的方法来实现 简介 NSPredicate类主要用来指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。...进行过滤,并返回符合条件的数据 NSArray *resultArr = [array filteredArrayUsingPredicate:predicate]; 具体实现,首先我们定义一个Peron类
NSNumber是一个类簇。意思是当你在运行时创建一个实例时,你会得到一个具体的子类来存储提供的值,就当那个对象是NSNumber的子类就好。...b) Mutable的Array可以直接sort,不需要返回新array 如果在collection中想表达”no object”,可以使用NSNull类 很多collection类实现了NSFastEnumeration...NSLocalizedDescriptionKey:desc};NSError *error = [NSError errorWithDomain:domain code:-101 userInfo:userInfo]; 自定义类应当使用三个字母的前缀...工厂类方法在创建时应当以类名字作为开头(无前缀),除非类的子类存在相同的工厂方法了。例如 [NSMutableArray array];
instancetype 使用instancetype关键字作为返回类型的方法,该方法返回一个类的实例(或 该类的子类)这些方法包括alloc,init,和类工厂方法。...因为 一个id可以是任何类型的对象类,由于存在一个名为-count的方法在一些类中, 编译器可能返回一个+factoryMehtodB的实现的方法。...编译器确定适当的返回类型+factoryMethodA应该是MyObjectSubclass 子类,而不是超类的工厂方法被调用。...这通常是init方法和类的工厂方法。 甚至编译器会自动转换以“alloc”、“init”、“new”开头的方法,而不转换其他的方法。...使用modern Objective-C converter,Edit > Refactor > Convert to Modern Objective-C Syntax.
CFRunLoopObserverRef 其中 CFRunLoopModeRef 类并没有对外暴露,只是通过 CFRunLoopRef 的接口进行了封装。...RunLoop 有5个类的关系 一个 RunLoop 包含若干个 Mode,每个 Mode 又包含若干个 Source/Timer/Observer。...RunLoop 的实际应用举例 AFNetworking AFURLConnectionOperation 这个类是基于 NSURLConnection 构建的,其希望能在后台线程接收 Delegate...AsyncDisplayKit AsyncDisplayKit 是 Facebook 推出的用于保持界面流畅性的框架,其原理大致如下: UI 线程中一旦出现繁重的任务就会导致界面卡顿,这类任务通常分为3类:...其中前两类操作可以通过各种方法扔到后台线程执行,而最后一类操作只能在主线程完成,并且有时后面的操作需要依赖前面操作的结果 (例如TextView创建时可能需要提前计算出文本的大小)。
The isa pointer of Instance and Class Firstly, let's have a look at the struct o...
引用是iOS内存管理中的重要知识点,总所周知,iOS对象的内存管理是使用引用计数来表示的。一个对象只有在它的所有强引用都被释放后才能被回收。因此,一个对象的生命...
官方文档Objective-C Runtime The Objective-C runtime is a runtime library that provides support for the dynamic...properties of the Objective-C language, and as such is linked to by all Objective-C apps....The down low on Objective-C Runtime: The Objective-C Runtime is an open source library written in C...简单点理解,Runtime就是一个C和汇编写的代码库——是Objective-C之所以成为Objective-C的一个库。 用一图以助理解: ?...; 表示Objective-C中的属性。
领取专属 10元无门槛券
手把手带您无忧上云