首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

OC学习13——Foundation框架集合

来创建NSArray   参考NSArray类文档,可以看到NSArray集合方法大致包含如下几类: 查询集合元素NSArray索引,即下标 根据索引值取出NSArray集合元素 集合元素整体调用方法...1、NSSet一个广泛使用集合,NSSetHash算法来储存集合元素,因此具有很好存取和查找性能。也正因为是才用Hash算法储存元素,NSSet不能保证元素添加顺序,顺序可能会发生变化。...判断标准是这样: 先调用hash方法得到该对象hashCode值,然后根据该hashCode值决定该对象底层hash表存储位置,如果该hashCode值对应存储位置上没有存储元素,则系统将直接将该对象存储到对应位置上...NSMutableSetNSSet上增加了增加元素、删除元素方法之外,还增加了集合进行计算交集、并集和差集方法。...该自定义类必须实现copyWithZone:方法,该方法最好返回该对象不可变副本。

2K80

iOS 底层原理探索 之 KVC 我愿称之它为魔法...

1.KVC是什么 键值编码是一种由NSKeyValueCoding非正式协议启用机制,对象采用该机制来提供属性间接访问。...get 访问器(或 getter)返回属性值。set 访问器(或 setter)设置属性值。 Objective-C ,您还可以直接访问属性底层实例变量。...1.实例搜索找到一个名称为get、、is、 或 访问器方法_,该顺序。如果找到,则调用它并使用结果继续执行步骤 5。否则继续下一步。...如果找到这些一个和其他两个中至少一个,则创建一个响应所有NSArray方法集合代理对象并返回该对象。否则,继续执行步骤 3。...如果该值是 支持标量类型NSNumber,则将其存储一个NSNumber实例并返回该实例。 6.如果结果是 NSNumber 不支持标量类型,则转换为NSValue对象并返回。

40120

iOS底层学习——KVC上篇

1.KVC协议定义 键值编码是由NSKeyValueCoding非正式协议启用一种机制,对象采用该机制来提供属性间接访问。...KVCObjective-C定义:KVC定义都是NSObject,扩展来实现(Objective-C中有个显式 NSKeyValueCoding类别名-分类)。...官方文档中有相关说明,见下图: 翻译过来意思是: setValue:forKey: 默认实现,给定key和value参数作为输入,尝试将名为key属性设置为value,接收调用对象内部,...使用以下过程:顺序查找名为set: 或 _set 一个访问器。...如果这三个方法都找到,那么就返回一个可以响应NSSet方法代理集合,和上面一样给这个代理集合发NSSet消息。

42330

IOS开发之自定义Button(集成三种回调模式)

具体内容请参考之前博客:“Objective-CBlock回调模式”,“Target-Action回调模式”,“Objective-C委托(代理)模式”。...button是我们会用上上面的方法,首先新建一个ViewController, 然后把我们新建ViewControllerAppDelegate.m设置成我们根视图,我们关于Button初始化和配置都写在...类继承于UIView, 我们就在MyButton类自定义我们button.下面要为自定义Button添加目标动作回调接口,步骤如下:       1.MyButton.h声明目标动作注册方法:...中进行button初始化,并注册目标方法回调,当点击button时,我们MyViewControllertapButton方法就会被执行: 1 //v2添加一个button 2...3.MyButton.m当开始点击按钮时做一下处理,首先得判断delegate对象是否实现了协议方法如果实现了就通过delegate回调,如果没实现就不调用 2 -(void)touchesBegan

1.1K80

【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词

NSSet 功能与用法 (1) NSSet 简介 NSSet 功能简介 :  -- 基本属性 : 无序, 不可重复; 如果将两个相同元素放在同一个 NSSet , 只会保留一个; -- 性能分析 :...NSSet 判重原理 (1) NSSet 重复判定原理 NSSet 添加元素判断 :  -- 位置判断 : 向 NSSet 添加元素时, NSSet 会调用对象 hash 方法 获取对象 哈希值,...根据 HashCode 判断元素 NSSet 哈希表存储位置; -- 重复判断 : 两个元素 HashCode 相同, 通过 isEqual : 方法判断, 如果返回 NO 则将两个元素放在同一个位置...NSSet 功能与用法 (1) NSSet 简介 NSSet 功能简介 :  -- 基本属性 : 无序, 不可重复; 如果将两个相同元素放在同一个 NSSet , 只会保留一个; -- 性能分析 :...根据 HashCode 判断元素 NSSet 哈希表存储位置; -- 重复判断 : 两个元素 HashCode 相同, 通过 isEqual : 方法判断, 如果返回 NO 则将两个元素放在同一个位置

1.2K20

iOS_理解“对象等同性”这一概念(==、isEqual、hash)

若想在自定义对象中正确覆写这些方法,就必须先理解其约定(contract)。如果isEqual:方法判断两个对象相等,那么其hash方法也必须返回同一个值。...如:set会根据哈希值把对象分装到不同数组向set添加新对象时,要根据其哈希值找到与之相关那个数组,一次检查其中各个元素,看数组已有对象与之相等。...如果相等则说明要添加对象已经set里了。...(由此可见,如果多个对象返回相同哈希值时,那么set已经有100w个对象情况下,继续加时则需要将这100w个对象都扫描一遍)所以我们需要尽量降低哈希值碰撞率。...五、容器可变类等同性 ​ 注意当把一个对象放入容器(collection)之后,就不应该改变其哈希值了。如上所说collection会把各个对象按照其哈希值分装到不同“箱子数组”

37310

Objective-C集合类

下面详细介绍Objective-C集合类以及每个集合类用法,学过其他面向对象编程语言小伙伴们看到OC集合类会有种莫名亲切感,理解起来问题不大,可以类比Java集合类去学习...Objective-C集合类主要包括不可变数组--NSArray,  可变数组--NSMutableArray,   不可变字典--NSDictionary,    可变字典--NSMutableDictionary...NSArray也是OC一个对象,使用NSArray也需要进行实例化,前面的博客初始化中提到了便利初始化函数和便利构造器,NSArray也少不了这两样东西我们可以通过NSArray便利初始化函数或者便利构造器进行...foreach用法 1 2 3 4 for(id obj in array) {     NSLog(@"%@", obj); }   5.可变数组进行排序 //对数组进行排序 [...OC给我们提供啦一个类专门来把基本数据类型封装成对象,这个类就是NSNumber.     ​    ​    ​1.

1.1K70

oc深坑測试题及其答案

C、retain:此属性仅仅用于obj-c对象类型。參数进行release旧值,再retain新值。 D、copy:此属性仅仅对实现NSCopying协议对象有效(NSString)。...方括号“[]”作用,下列说法错误是: 答案:(D) A、用于通知某个对象该做什么 B、方括号内第一项是对象,其余部分是你须要对象运行操作 C、Objective-C通知对象运行某种操作...C、仅仅能訪问对象属性。 D、当对象属性值改变时,我们能收到一个通知。...答案:(D) A、没有getter方法,当calvalue赋值时,将产生一个NSString副本。 B、此属性可保证多线程安全。 C、此属性合成时能够生成设置器方法。...答案:(T) 正确 错误 9、 dealloc方法变量释放顺序与初始化顺序同样。

41130

iOS - 关于 KVC 一些总结

使用集合运算符 KVCvalueForKeyPath:方法除了可以取出属性值以外,还可以KeyPath嵌套集合运算符,来集合对象进行操作。...嵌套运算符 处理集合对象嵌套其他集合对象情况,并根据运算符返回一个NSArray或NSSet实例。...@distinctUnionOfSets 读取集合每个集合每个元素右键路径指定属性,放在一个NSSet实例,去重后返回。...注意: 因为Swift所有属性都是对象,所以这里仅适用于Objective-C属性。 当进行赋值如setValue:forKey:时,如果key数据类型是非对象类型,则value就禁止传nil。...我们可以消息接收者类实现validate:error:方法来自定义逻辑返回YES或NO。

1.8K10

老司机读书笔记——Effective Objective-C 2.0阅读笔记

Effective Objective-C 2.0阅读笔记 这篇文章你将看到以下内容: Efficetive Objective-C 2.0阅读笔记一些有价值建议 ---- 1.对象内部尽量直接访问实例变量...访问实例变量不会触发KVO -init及-dealloc方法应使用实例变量 对象内部应尽量遵守如下原则:取值采用实例变量,赋值采用属性。 ---- 2.消息转发机制流程 ?...[arr1 addObject:@2];//至此set居然包含了两个相同元素 NSSet * setCopy = [set copy];//书中此处表述setCopy应只有一个元素,然实测有两个相同元素...---- 5.-dealloc只释放引用并解除监听 -dealloc方法里,应该做事情就是释放指向其他对象引用,并取消原来订阅“键值观测”(KVO)或NSNotificationCenter...如果对象持有文件描述符等系统资源,那么应该专门编写一个方法来释放此种资源。这样类要和其他使用者约定:用完资源后必须调用close方法。

44420

UI篇-UIResponder之事件传递和响应精析

对于触摸事件UIResponder内部提供了以下方法来处理事件: 事件对象UIEvent UIEvent.h文件,我们可以看到有一个UIEventType类型属性,这个属性表示了当前响应事件类型...分别有多点触控、摇一摇以及远程操作(iOS之后新增了3DTouch事件类型)。一个用户点击事件处理过程,UIEvent对象是唯一。...每次点击发生时候,点击对象都放在一个集合传入UIResponder回调方法,我们通过集合对象获取用户点击位置。...,然后调用hitTest: withEvent:依次获取处理这个事件所有视图对象获取所有的可处理事件对象后,开始调用这些对象touches回调方法 自定义View重写 touchesBegan...这时我们如果还想再加inputAccessoryView,API说法,就需要新建一个该视图子类,并重新声明inputAccessoryView属性为readwrite

2.4K30

浅析对象等同性判断

换句话说,单纯通过比较两个对象指针来判断等同性总是太过苛刻。而对于自定义类型,开发中经常要对两个对象相等性进行判断,即对两个对象每个属性进行比较。...NSFoundation提供一些方法 Objective-CNSFoundation框架给我们提供了很多判断对象等同性方法。...相对而言,把这种对象添加到collection,也会产生性能问题。 更加优秀方法 分别计算每个属性哈希值,然后哈希值进行位异或运算,结果作为对象哈希值。...但是,如果我们继续添加一个不同于p1和p2p3对象,然后改变p3各个属性和p1相同,再观察set count,如下: EOCPerson *p1 = [[EOCPerson alloc] init...作为人类,我们很努力地去理解和实现平等,我们社会中,自然生态环境立法和执法选举我们领导人过程人类作为一个物种互相沟通延续我们存在这一共识

8.2K50

16道面试官必问你必须会iOS面试题

:我们将一个路径所有点先放进 NSSet 。...本例,如果 block 执行代码是通过参数传递进来的话,似乎并没有什么办法可以修改它了。 题目 10:一个 Objective-C 对象内存结构是怎样?...题目 11:Objective-C 对象内存结构 isa 指针是用来做什么,有什么用? Objective-C 是一门面向对象编程语言。每一个对象都是一个实例。... Objective-C 语言中,每一个类实际上也是一个对象。每一个类也有一个名为 isa 指针。...例如在一个函数一个对象刚开始有一个引用计数 +1 操作,之后又紧接着有一个 -1 操作,那么编译器就可以把这两个操作都优化掉。

2.2K50

《Effective Objective-C》干货三部曲(二):规范篇

第18条:尽量使用不可变对象 书中作者建议尽量把对外公布出来属性设置为只读,实现文件内部设为读写。具体做法是: 头文件,设置对象属性为readonly,实现文件设置为readwrite。...这样一来,当在外部获取这个属性时,获取只是内部可变型一个不可变版本,例如: 公共API: @interface EOCPerson : NSObject @property (nonatomic...我们可以利用OC分类机制,将类这些方法一定逻辑划入几个分区。...第26条:勿分类声明属性 除了实现文件里class-continuation分类可以声明属性外,其他分类无法向类中新增实例变量。...并且dealloc方法也不能调用属性存取方法,因为很有可能在这些方法里还有其他操作。而且这个属性还有可能处于键值观察状态,该属性观察者可能会在属性改变时保留或者使用这个即将回收对象

89321

touchesBegan 触摸事件

一、概念介绍 1、在用户使用App过程,会产生各种各样事件,iOS事件可以分为3大类型: 1)触摸事件 2)加速计事件 3)远程操控事件 响应者对象UIResponder iOS...不是任何对象都能处理事件,只有继承了UIResponder对象才能接收并处理事件。...,通过forin循环来遍历NSSet一个元素,当用户用一根手指触摸屏幕时,会创建一个与手指相关联UITouch对象, 保存着跟本次手指触摸相关信息,比如触摸位置、时间、阶段, 当手指离开屏幕时...; 5)获取当前触摸事件所处状态 触摸事件屏幕上有一个周期,即触摸开始、触摸点移动、触摸结束,还有中途取消。...:(nullable UIView *)view; 四、UIEvent类 UIEvent:成为事件对象,记录产生时刻和类型,事件对象包含于当前多点触摸序列相对应所有触摸对象,还可以提供与特定视图或窗口相关联触摸对象

78320
领券