M13OrderedDictionary是拥有字典和数组功能的第三方集合序列,开发者可以通过索引和键值来实现对其中元素的访问。其实现了NSArray和NSDictionary中的所有方法,并且支持KVC与KVO。
前提是实现NSCopying协议的copyWithZone:方法,否则会导致出现找不到selector的崩溃。**unrecognized selector sent to instance**
在iOS开发中,Protocol是一种经常用到的设计模式,苹果的系统框架中也普遍用到了这种方式,比如UITableView中的<UITableViewDelegate>,以及<NSCopying>、<NSObject>这样的协议。我想大家也都自定义过协议,一般都用于回调,或者数据传递。
a) Keys必须实现NSCopying协议。添加成员的方法并不将每一个key直接进行添加,而是将每一个key进行copy并将copy后对象添加到dictionary中。在添加到dictionary之后,自有的keys的copy对象不能被修改。 b) Keys还必须实现hash和isEqual方法,因为dictionary使用了hashTable来组织存储,并且进行快速访问。并且,dictionary的高性能严重依赖了hash方法。 c) 虽然可以用任何使用了NSCopying协议并继承了hash、isEqual方法的对象,但是最好不要使用large Object来做key,比如NSImage等等,因为这样会损耗性能。
如何实现对象拷贝 第一种方法: 1.遵守协议 NSCopying 2.实现协议 NSCopying 协议 public protocol NSCopying { public func
你要知道的NSCopying、NSCoding协议及对象序列化和反序列化都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 本篇文章主要讲解NSCopying协议,以及NSCoding协议实现对象的序列化和反序列化,实际开发中如果要自己造轮子这两个协议还是比较重要的。 NSCopying协议 Foundation框架中为我们提供的基础的类基本都实现了NSCopying协议,因此,我们可以使用copy方法用来获取对象的一个不可变副本对象,
iOS游戏开发之UIDynamic 简介 什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象重力、弹性碰撞等现象 物理引擎的价值 广泛用于游戏开发,经典成功案例是“愤怒的小鸟” 让开发人员可以在远离物理学公式的情况下,实现炫酷的物理仿真效果 提高了游戏开发效率,产生更多优秀好玩的物理仿真游戏 知名的2D物理引擎 Box2d Chipmunk 使用步骤 要想使用UIDynamic来实现物理仿
1 import UIKit 2 class ViewController:UIViewController { 3 4 override func viewDidLoad() { 5 super.viewDidLoad() 6 // Do any additional setup after loading the view, typically from a nib. 7 8 let plistPath = Bundle.main.path(forResource:“demoPlist”, ofType:“plist”) 9 let data:NSMutableDictionary = NSMutableDictionary.init(contentsOfFile:plistPath!)! 10 let message = data.description 11 let name = data[“Name”] 12 let age = data[“Age”] 13 14 print(message) 15 print(name) 16 print(age) 17 } 18 }
注:在- (id)copyWithZone:(NSZone *)zone方法中,一定要通过[self class]方法返回的对象调用allocWithZone:方法。因为指针可能实际指向的是PersonModel的子类。这种情况下,通过调用[self class],就可以返回正确的类的类型对象。
模拟一份校招的简历,简历里面有人名,性别,年龄以及学历相关的信息。这里面学历相关的信息又包含学校名称,专业,开始和截止年限的信息。
上面是NSObject对象的头文件类部分, 可以看到还有一个NSObject protocol 我们也仔细看看都有什么协议方法@protocol NSObjec
概念介绍 UIDynamic从ios7才开始有的,其他2D仿真引擎: BOX2D:C语言框架,免费 Chipmunk:C语言框架免费,其他版本收费(C#、Objective-C、Java) 必须遵守了UIDynamicItem协议的控件才能应用这些行为,UIView遵守了,所以所有控件都可以使用 使用步骤:创建一个动画者对象UIDynamicAnimator并设置坐标系,再添加一个动画行为对象(并设置动画作用的控件) UIDynamic中的三个重要概念 UIDynamicAnimator:动画者,为动力
泛型可以让你使用自定义的类型来编写灵活的、可重用的函数和类型,可以避免重复,以清晰、抽象的方式表达其意图。 在2015年的WWDC上苹果推出了Swift 2.0版本,为了让开发者能从Objective-C更好的过度到Swift上,苹果也为Objective-C带来了Generics泛型的支持。
上一篇介绍了AFSecurityPolicy与安全认证,这一篇我们看一下请求参数的序列化问题,对应的都在文件AFURLRequestSerialization中,下面我们就开始了。
这里的复制指深复制 关于深浅复制传送门 深复制就是开辟新内存实现真正的内存复制 浅复制, 只复制指针, 堆内存不变.
从 Xcode 7 开始,为了更简单和高效的与 Swift 交互, Objective-C 支持了引入了 3 个高级特性:轻量泛型、Nullability annotation、KindOf。
UIDynamic是iOS中UIKit框架提供的接口,其用来为UI元素增加符合物理世界运动规则的动画行为。简单来说,UIDynamic提供的实际上是一个物理引擎,由于它是iOS原生系统支持的(iOS 7以上),因此兼容性和易用性非常好,使用它开发者可以非常方便的创建出物理动画。本篇文章,我们将讨论UIDynamic的设计架构、使用方法以及做一些简单的物理动画示例,希望可以在应用开发中为你带来一些启发。
上文讲到了为window加一个边界。实现碰撞的效果,接下来我们将提到一个托付方法:
版权声明:转载请标明出处 https://blog.csdn.net/ZY_FlyWay/article/details/79216805
最近对指针和内存有产生了浓厚的兴趣,然后就想研究一下iOS 程序指针内存对象这些东西都是怎么关联在一起的呢,又是怎么工作的呢。
a.在 ARC 中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如: delegate 代理属性。
NSDictionary类简介 1. 以key-object的形式保存数据,是一个集合类(collection) 2. 词典中词条的保存是无序的 3. 不可变词典(内容一旦init后就不能更改) 4. 既然不能更改,当然就不能进行删除、替换、增加操作,只能查询 5. key值不能重复 属性表(@property) @property 描述 @property(readonly) NSUInteger count 词典词条的数量 @property(readonly, copy) NSArray
我们知道,现在智能手机手机的功能已经越来越强大。小小的手机中集成了众多的传感器配件。通过这些传感器可以获取到手机甚至用户的状态信息。
本文首发于我的个人博客:『不羁阁』 https://bujige.net 文章链接:https://bujige.net/blog/iOS-Foundation-Dictionary.html 本文对Foundation框架中的字典类(NSDictionary和NSMutableDictionary)的使用做一个详细的总结。 1. NSDictionary 1.NSDictionar介绍 Dictionary翻译过来叫做"字典" 日常生活中,“字典”的作用:通过一个拼音或者汉字,就能找到对应的详细
1、系统对象的复制 不管是集合类对象,还是非集合类对象,接收到copy和mutableCopy消息时,都遵循以下准则: copy返回immutable对象;所以,如果对copy返回值使用mutable
1. 你如何理解OC 的内存管理 OC 内存管理是基于引用计数。谁想使用某个对象B,就要把对象B 的计数器+1,如果不
strong,weak, retain, assign的区别@property的参数 先说经验 使用场合 copy:NSString,block, weak:UI控件,代理 strong:一般对象、自定义对象 在OC中:默认对对象都是强引用;如果对象没有强引用会被立即释放 assign:基本数据类型,结构体,枚举,非OC对象类型 以下扯淡的比较多 strong与weak是由ARC新引入的对象变量属性 xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain和assign,是不支
深浅拷贝的基本概念和用法 基本概念 浅拷贝纸复制对象的本身,对象里的属性、包含的对象不做复制 深拷贝则既复制对象本身,对象的属性也会复制一份。 Foundation 框架中支持复制的类,
iOS9中为我们提供了许多新的api,搜索功能的加强无疑是其中比较显眼的一个。首先,我们先设想一下:如果在你的app中定义一种标识符,在siri和搜索中,可以用过这个标识符搜索到你的app,是不是很棒?不,这还差得远,你可以定义任意的数据,使其在搜索和siri中可以快速检索到,这样的搜索功能是不是非常酷?不,还有更cool的,你甚至可以在你的网站中添加一些标志,使apple的爬虫可以检索到,那样,即使用户没有安装你的app,也可以在搜索中获取到相应的信息,这太强大了,对吧。
单例设计模式 基本概念 单例设计模式运用较为普遍、广泛且较为简单的设计模式之一,它的设计原理是始终返回一个实例,即一个类始终只有一个实例。 创建单例的基本步骤 声明一个单例对象的静态实例 创建一个类的
我们先看一下我们前几篇都做了什么,前几篇以GET请求为例,详述发起网络请求的过程,然后,讲述了AFURLSessionManager中实现的NSURLSession的几个苹果原生的代理。最后,讲述了AFURLSessionManagerTaskDelegate中的三个转发的代理。从这篇开始讲述从网络请求回数据的解析。
iOS 10中引入 UserNotifications ,用来取代之前的通知处理方式,并增加了很多新的特性,来丰富通知的功能,使用时需要引入 UserNotifications 头文件,并遵循协议 UNUserNotificationCenterDelegate
在实际的开发过程中,继承和类别都会得到很多用处。对于界面相似度很高的情况下,使用继承可以节省很多代码和设置,只需要在子类中重写父类中的方法,或者增加新的子类方法即可,代码非常的简洁维护起来也很方便。下面小节下相关的知识,供需要的朋友查看。 在Objective-C中,给一个类扩展一个其它方法,有两种实现方式:类别和继承。
表明属性是只读,只需要提供getter函数即可。但是假如你还提供@synthesize那么只有getter方法是synthesized
NSCoder 是一个抽象类,抽象类不能被实例话,只能提供一些想让子类继承的方法。
atomic: 原子操作(原子性是指事务的一个完整操作,操作成功就提交,反之就回滚. 原子操作就是指具有原子性的操作)在objective-c 属性设置里面 默认的就是atomic ,意思就是 setter /getter函数是一个原子操作,如果多线程同时调用setter时,不会出现某一个线程执行完setter所有语句之前,另一个线程就开始执行setter,相当于 函数头尾加了锁 . 这样的话 并发访问性能会比较低 . nonatomic: 非原子操作 一般不需要多线程支持的时候就用它,这样在 并发访问的
在Objective-C中,可以通过下标来访问数组中的元素,如果数组是NSMutableArray类型的可变数组,则还可以通过下标来对数组中的元素进行赋值操作。例如:
KVO底层封装了KVC, KVC最重要的原理就是isa-swizzling ,我们在利用KVO的时候就传入了观察者,对象,以及观察的属性.我们在底层就通过对象的方法名得到环境参数,isa结合环境参数直接得出方法接口(SEL),最后得到该方法的函数实现(IMP).我们对应属性的变化,就通过对应的settr方法,来到IMP,就会消息转发从动态子类转发给父类.同时会触发KVO的 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;方法.拿到变化
之前用了两篇篇幅分析了下AFN的核心类AFURLSessionManager在网络请求之前、请求中、以及请求结束时,做了哪些工作。接下来,将用两篇文章的篇幅来分析一下AFN中网络请求AFURLRequestSerialization与响应AFURLResponseSerialization的序列化。
AFHTTPSessionManager继承自AFURLSessionManager,提供了便捷的方法用于HTTP请求,当一个baseURL,根据相对路径,可以很方便地进行GET/POST或者其他请求。AFHTTPSessionManager本身并没有做什么实事,只是作为一个封装,将一些需求分发到其他相关类去做。
XMPPStream是xmpp的核心,这是你需要接触的主要类,所有的拓展类和定制类需要添加它,它由一些有趣的功能设计,让框架灵活、可拓展和更加容易在它之上开发
iOS 13 以后,UITableView 和 UICollectionView 也支持 Context Menus,使用起来特别简单,只需要实现相应的代理方法,返回UIContextMenuConfiguration即可。
风格纠错题 风格纠错题.png enter image description here 修改完的代码: 修改方法有很多种,现给出一种做示例: // .h文件 // 修改完的代码,这是第一种修改方法
翻译自raywenderlich网站iOS教程Graphics & Animation系列 介绍 UIKit Dynamics是一个集成到UIKit中的完整物理引擎。它允许您通过添加诸如重力,附件(弹簧)和力量等行为来创建感觉真实的界面。您定义了您希望界面元素采用的物理特征,动态引擎负责其余部分。
我们在声明@property 属性时,总是要在括号中写上assign、retain、copy、weak、strong中的一个,很多时候,我们仅仅只是按照习惯去写经常写的那一个,但有时候看代码时又会发现别人用的不尽相同,那这些之间的区别是什么呢?
单例一般作为工具类 单例命名:一般情况下如果一个类是单例,那么就会提供一个类方法用于快速创建单例对象 而且这个类方法的名称是有一定的规则:share + 类名称 / default + 类名称
iOS中可以有四种持久化数据的方式: 属性列表、对象归档、SQLite3和Core Data。
在实际的项目开发中,数据持久化是我们必须要考虑的一个事情,如何把我们需要的数据进行持久化处理。
领取专属 10元无门槛券
手把手带您无忧上云