名词:
分类:
优势:
应用场景:
推荐的腾讯云相关产品:
产品介绍链接:
✨建议收藏,用到时候一查就明白了 --xx_cc. 一、NSPredicate基本语句 只要我们使用谓词(NSPredicate)都需要为谓词定义谓词表达式,而这个表达式必须是一个返回BOOL的值。 谓词表达式由表达式、运算符和值构成。 1.比较运算符 比较运算符如下 =、==:判断两个表达式是否相等,在谓词中=和==是相同的意思都是判断,而不是赋值 NSNumber *testNumber = @123; NSPredicate *predicate = [NSPredicate predicateW
Foundation框架中最常用的类。 Foundation框架中最我们经常用的类大致有NSString、NSArray、NSDictionary等等,虽然不需要将每一个类中提供了什么方法都记下来,但是需要做到心中有数,知道Foundation框架提供了什么样的方法,能够达到什么效果,用到的时候直接去API中查找即可,避免因为不知道有这些方法,而走弯路。 NSString NSString创建与内存存储 NSString是1个数据类型,用来保存OC字符串,NSString的本质是1个类,既然是1个类,所以,
在现代汉语的解释中,谓词是用来描述或判断客体性质、特征或者客体之间关系的词项。通俗的说,它是描述事物属性的。在iOS开发Cocoa框架中,有提供NSPredicate类,这个类通常也被成为谓词类,其主要的作用是在Cocoa中帮助查询和检索,但是需要注意,实质上谓词并不是提供查询和检索的支持,它是一种描述查询检索条件的方式,就像更加标准通用的正则表达式一样。
OC集合类是一些非常有用的工具类,它可以用于存储多个数量不等的对象,并可以实现常用的数据结构(栈、队列等),此外,OC集合还可用于保存具有映射关系的关联数组。OC的集合大致可以分为:NSArray、NSSet、NSDictionary三种体系。NSArray代表有序可重复的集合;NSSet代表无序不可重复的集合;NSDictionary代表具有映射关系的集合。显然,这三类集合分别对应这Java中的List、Set和Map。 集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的
Foundation Kit基础知识 1.范围作用 NSRange typedef struct _NSRange { unsigned int location; unsigned int length; } NSRange; 使用:location是开始位置,length是元素个数;通常在字符串范围或者数组使用 创建NSRange 1.1)直接赋值给字段(range.location = 12,range.length=13) 1.2)使用聚合机制(range={4,5}) 1.3)
概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底是谁?它为什么又出现在Objective-C中间呢?今天我们将揭开这层面纱,重点分析在IOS开发中一个重要的框架Foundation,今天的主要内容有: 1. Foundation概述 2. 常用结构体 3. 日期 4. 字符串 5. 数组 6. 字典 7. 装箱和拆箱 8. 反射 9. 拷贝 10. 文件操作
-- 创建字符串 : 使用 init 开头的实例方法, 也可以使用 String 开头的方法;
一、谓词的基本概念与使用 1、谓词(NSPredicate)用于定义一个逻辑条件,通过该条件可执行搜索或内存中的过滤操作。上一篇文章中介绍的集合都提供了使用谓词对集合进行过滤的方法。OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到过滤的作用,我们可以编写简单的谓词语句,就可以从数组中过滤出我们想要的数据。非常方便。在Java中是没有这种技术的,但是有开源的框架已经实现了此功能。 2、创建谓词之后,如果谓词中没有占位
有时我们需要在一大段长文本中过滤出我们需要的字段,或者检验该文本是否符合要求(该文本是否是邮箱,链接,电话号码或身份证),这时候就需要用到正则表达式了,当然我们也可以使用 NSPredicate,这不重要,重要的是表达式对于刷选和逻辑判断来说是十分方便的。
在iOS的UI系统中,有3个控件自带剪切板操作,分别是UITextField、UITextView与UIWebView。在这些控件的文字交互处进行长按手势可以在屏幕视图上唤出系统的剪切板控件,用户可以进行复制、粘贴,剪切等操作,其效果分别如下图所示。
无论是什么编程语言对字符串的操作是少不了的,对复杂的字符串的分析和操作我们可以用正则表达式来达到我们的目的。简单的字符串处理我们可以借助OC中NSString封装好的字符串处理方法,不过前提是你得了解每个方法如何使用,以下做了一个简单的总结,便于以后使用。以下事例是原创代码,转载请注明出处。 1.字符串的创建 字符串的创建有多种方法,下面的例子中给了常用的几种字符串创建方法(还有好多) 1 2 3 4 5 6 //字符串创建工厂
为了给字符串数组排序,除了用C/C++的基本办法,iOS开发者更应该学会利用苹果专门为NSArray 排序提供的sortedArrayUsingComparator 方法:
image.png NSString copy测试 NSString *string = @"test"; NSString *string1 = [string copy]; NSString *string2 = [string mutableCopy]; NSMutableString *string3 = [string copy]; NSMutableString *string4 = [string mutableCopy]; image.png 如图,string1 和 string3 都
NSDictionary类简介 1. 以key-object的形式保存数据,是一个集合类(collection) 2. 词典中词条的保存是无序的 3. 不可变词典(内容一旦init后就不能更改) 4. 既然不能更改,当然就不能进行删除、替换、增加操作,只能查询 5. key值不能重复 属性表(@property) @property 描述 @property(readonly) NSUInteger count 词典词条的数量 @property(readonly, copy) NSArray
对于如果导入是UIKit类就使用UIKIT_EXTERN 如果是Founction使用关键词FOUNDATION_EXTERN
json与模型的转换框架很多,YYModel 一出,性能吊打同类组件,终于找了些时间观摩了一番,确实收益颇多,写下此文作为分享。
本文首发于我的个人博客:『不羁阁』 https://bujige.net 文章链接:https://bujige.net/blog/iOS-Foundation-Array.html 本文对Foundation框架中的数组类(NSArray、MutableNSArray)的使用做一个详细的总结。 1. NSArray 1. NSArray介绍 NSArray是OC中的数组类,开发中建议尽量使用NSArray替代C语言中的数组 C语言中虽然也有数组,但在开发的过程中存在一些弊端 int arr
在开发的时候,使用copy的频率还是挺高的,我们只要copy定义的属性的设置方法并不保留新值,只是其拷贝一份值,为什么NSString、NSArray、NSDictionary属性的定义说那个copy,如果使用strong关键字有什么问题?所以这节就讲一下以及什么使用深拷贝和浅拷贝的问题。
现在即时通讯和朋友圈这两块功能基本上属于app的标配功能了吧。图文混排在这两块中使用最为常见,我已经做好了demo:图文混排demo。
1.NSString *greeting = [NSString stringWithUTF8String:“hello”];
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140579.html原文链接:https://javaforall.cn
当你发送符合键值的对象valueForKeyPath:消息时,可以在key path中嵌入一个集合运算符。 一个集合运算符是一个小的关键字列表之一,前面有一个符号(@),它指定了getter在返回之前以某种方式对数据进行处理。NSObject提供的valueForKeyPath默认实现实现了这种行为。
更重要的是,有时候在iOS面试的时候,部分面试官会不仅问你某种场景会用到什么框架,更会问你如果要你来实现这个功能,你有没有解决思路?所以,自己实现字典转模型还是有必要掌握的。有了这个基础,在利用运行时runtime的动态特性,你也可以实现这些第三方框架。
数据的常规方法的使用本文不做描述,本文旨在归纳一些数组不是很常用的方法使用。算作一个归纳笔记,后续会持续更新.....
NSArray数组类是Objective-C语言中常用的也是重要的一个类,除了开发中常用到的一些基础功能,NSArray及其相关类中还封装了许多更加强大的功能。有机会总结了一下,与需要的朋友们分享。
一、选择题(共80题,每题1分) 1、 不会立马使引用计数器改变的是: 答案:(C) A、release B、alloc C、autorelease D、retain 2、 在OC中类的接口声明keyword为: 答案:(B) A、@import B、@interface C、@implemention D、@protocol 3、 NSString *name = [[NSString alloc]initWithString:@”张三”];NSLog(@”%d”,[name retainCount]);上述代码打印结果是: 答案:(A) A、-1 B、0 C、1 D、2 4、 下列选项中所有属于对象的是: 答案:(C) A、我的白色iPhone4s;Mac Mini B、狗;老虎 C、邻居家的猫咪“贝贝”;我的弟弟“张三” D、保时捷;犀利哥 5、 NSDictionary *dict = [NSDictionary dictionaryWithObject:@”a value” forKey:@”aKey”];NSLog(@”%@”,[dict objectForKey:@”aKey”]);[dict release];控制台中打印的最后一条信息会是: 答案:(C) A、a value B、aKey : a value C、崩溃信息 D、a value : aKey 6、 现有例如以下集合,能准确删除“张三”的代码是:NSMutableDictionary * peoples=[NSMutableDictionary dictionaryWithObjectsAndKeys:@”张三”,@”左护法”,@”李四”,@”右使”,@”唐sir”,@”老大哥”, nil]; 答案:(A) A、[peoples removeObjectForKey:@”左护法”]; B、[peoples removeObject:@”张三”]; C、[peoples removeObjectAtIndex:0]; D、[peoples removeAllObjects]; 7、 关于类和对象的概念,下列属于对象的是: 答案:(C) A、奥迪A6 B、保龄球 C、世界冠军刘翔 D、西红柿 8、 下面说法不对的是: 答案:(A) A、nonatomic:提供多线程保护,提高性能,在没有使用多线程的编程中能够选择使用。 B、assign:属性默认值。说明设置器直接进行赋值。针对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char)等等。
利用KVC的 valueForKeyPath API、谓词的NSPredicate、数组的sortedArrayUsingComparator:API进行实现。
不得不承认KVC在开发过程中是神器一般的存在。如果正确灵活使用kvc,会使得整个开发过程轻松很多。简单而强大。
---- NSArray类简介 有序且只可以存储Objective-C对象的数组 初始化后,内容不可变,长度也不可变,不能进行增、删、改操作 不能存放nil (nil是标志数组的结束) 在MRC模式下,会发送retain消息于每个加入数组中的元素都进行保持,数组被释放的时候会发送release消息 ---- 属性表(@property) @property 描述 @property(readonly) NSUInteger count 数组元素的个数 @property(nonatomic,
在适配iOS13的时候,经常要对特定类进行特出处理,这个时候class与string之间的互相转换就经常需要使用。
我们可以使用setter方法为currentBalance属性赋值,这是直接的,但缺乏灵活性。
看了几篇文章,因为文章很新手向,所以内容很繁琐。故整理一下重点,写了测试程序去了解几个知识点,不讨论基本概念。
NSSet到底什么类型,其实它和NSArray功能性质一样,用于存储对象,属于集合; NSSet , NSMutableSet类声明编程接口对象,无序的集合,在内存中存储方式是不连续的,不像NSArray,NSDictionary(都是有序的集合)类声明编程接口对象是有序集合,在内存中存储位置是连续的; NSSet和我们常用NSArry区别是:在搜索一个一个元素时NSSet比NSArray效率高,主要是它用到了一个算法hash(散列,也可直译为哈希);开发文档中这样解释:You can u
OCHamcrest是OC的断言框架,提供更友好的断言接口。 OCHamcrest的断言方法都是以assertThat为前缀的。
恩,重点说完开始讲故事,这篇文章主要用来总结几种中文字符串比较的方法,以防以后我那次遇到什么特殊的需求。
OC提供了丰富的I/O相关API,如果只是管理文件和目录,程序可以使用NSFileManager进行管理,包括创建、删除、移动和复制文件等;如果程序需要读取文件内容,则可通过NSFileHandle进行处理;如果需要读取网络资源,则可通过NSURL进行处理;如果程序只是读取项目内部资源,则可借助MSBundle进行处理。 1、Foundation提供了NSData和NSMutableData,他们代表OC的数据缓冲区。NSData的作用有两个:将数据读入NSData;输出NSData的数据。 1 #i
某些情况下,后台可能由于各种原因,对某个字段返回了null值,这时我们取到的就是[NSNull null]这样一个对象,再比如说,后台可能对某一个数据取值,但取到了0个,这时返回的是一个空组,我们取到的就是@[],空组。 取到的array是一个NSNull对象。 NSNull是一个特殊的类,它和nil一样,也代表空值,但二者有区别,NSNull不接收NSArray的那些方法,它只有一个类方法: 因此判断数组是否为空,需要对各种情况都进行判断。 比如这种情况: ( "<null>", "<null>",
这篇总结什么? ---- 在该系列的上一篇的文章中,我们总结的大致内容如下: 1、视频录制 AVCaptureSession + AVCaptureMovieFileOutput 2、视频录制 AVCaptureSession + AVAssetWriter 3、AVCaptureSession + AVCaptureMovieFileOutput 与 AVCaptureSession + AVAssetWriter 的区别 这是这个系列总结
1、视频录制 AVCaptureSession + AVCaptureMovieFileOutput
在数组的开头和结尾插入/删除元素通常是一个O(1)操作,而随机的插入/删除通常是 O(N)的。
以上2个方法如果Key值不对(即该属性不存在),则会触发valueForUndefinedKey:方法,默认会抛出NSUndefinedKeyException异常,导致crash。
有关Runtime的知识总结,我本来想集中写成一篇文章的,但是最后发现实在是太长,而且不利于阅读,最后分成了如下几篇:
obj-c中有一类对象:NSArray,NSDictionary,NSString,NSNumber,NSDate,NSData以及它们的可变版本(指NSMutableArray,NSMutableDictionary...这一类) ,都可以方便的将自身的数据以某种格式(比如xml格式)序列化后保存成本地文件。 示例代码:NSArrayTest.h #import <Foundation/Foundation.h> #define FILE_NAME @"/tmp/data.txt" @interface
在OC中,因为采用内存计数的方式管理内存,所以浅复制时会对同一个内容计数加一,深复制则不会。
1.为什么main()总是返回0?可以将main()的返回结果视为“粗欧文报告”,这样0就是好消息,没有错误就是成功。 2.消息:消息发送(指令)必须写在一对括号中,并且必须包含以下两个部分。 指针,指向接收消息的对象。 方法名,要触发的方法的方法名。 3.如果在编写程序时,如声明指针时,不知道所指对象的准确类型,为此可以使用id类型。id的含义是:指针,并可以指向任意类型的Objective-C对象,e.g.: id delegate 注意:以上声明没有用星号。id已经隐含了星号的作用。 4.在obj-c中,创见对象最常见的途径就是使用alloc和init,通常会将这两个消息写在一行代码中,并以嵌套的形式连续发送(Apple推荐写法): [[NSDate alloc] init]; 5.合并存取属性的便捷方法: 在.h中国,通过@property声明属性,如 @property int w; 在impl中,要求编译器根据@property声明自动合成(synthesize)出存取方法。如: synthesize w; 6.方法前的-号表明此方法为实例方法,必须通过new才能使用; 方法前的+号表明此方法为类方法,是静态方法,无需new也能使用。 7.相互拥有的所有权关系导致相关的对象都无法被释放。这种情况称之为“retain循环”(retain cycle)。retain循环是导致内存泄露的常见原因。 8.使用弱引用(weak reference)可以解决retain循环问题。弱引用是不主张所有权的指针。 如: @interface Asset:NSObject { __weak Employee *holder; } @property (weak)Employee *holder; 9.当某个由弱引用所指向的对象被释放时,相应的指针变量会被归零,即赋为nil。 10.retain计数规则。 前提:“你”代表“当前正在使用的某个类实例”。 a.如果用来创建对象的方法,其方法名是以alloc或new开头的,或者包含copy,那么你已经得到了该对象的所有权(即可以假设该新对象的retain计数时1,且该对象不在NSAutoreleasePool对象中。)你要负责在不许要使用该对象的时候释放之。以下时部分常见会“传输”所有权的方法:alloc(后会跟一个init方法),copy和mutableCopy。 b.通过任何其他途径创建的对象(例如便捷方法),你是没有所有权的(可以假设新对象的retain计数是1,而且该对象已经在NSAutoreleasePool对象中。如果没有保留该对象,那么当NSAutoReleasePool对象被“排干”时,这个对象就会被释放。) c.如果你不拥有某个对象,但是要使用该对象的时候,可以向其发送release消息或者autorelease消息(release会使retain计数立刻减1。autorelease会导致,当NSAutoreleasePool对象被排干时,再向相应的对象发送release消息)。 d.只要对象还有至少一个拥有方,该对象就会继续存在下去(当该对象的retain计数到达0时,就会收到dealloc消息)。 11.内存管理,需要经常从局部角度来思考问题,并且以类为分界线,考虑内存管理问题,而不是去考虑应用的其他部分时怎么样处理某个对象的。 12.为什么需要一个不能修改的数组NSArray呢?原因有二: a.保证数组内容的安全。也就是说,程序在使用NSArray对象时,只能“看”不能“改”。 b.性能考虑。不可修改对象永远无需拷贝。NSArray的copy方法其实不会做任何额外的工作,仅仅返回指向自己的指针而已。而NSMutableArray的cpy方法则会制作一份自己的拷贝,并返回指向新数组对象的指针。 13.NSSet的对象是无序的,所以不能通过索引来访问。只能向NSSet对象查询某个对象是否存在,它有一个名为containObject:的方法。 14.在Apple提供的类中,有些覆盖了isEqual:方法。对于这些类,相等的(equal)和相同的(identical)是两个概念。假如程序有两个指向NSString对象的指针: NSString *x = … NSString *y = … 如果x、y保存的是完全一样的地址,则称这两个变量是“相同的”。如果x和y所指向的NSString对象包含的是相同的字符,并且排列顺序也一样,则称这两个变量是“相等的”。因此,相同的变量一定是相等的,但是相等的变量不一定是相同的。 15.C、C++、Objective-C这类语言的代码文件要经过两步才能完成编译。首先,预处理器(preprocessor)会读入并处理整个文件。接着,预处理器的输出结果会作为输入
大名鼎鼎的AFNetWorking,做iOS开发的人都知道吧。 AFNetWorking一款轻量级网络请求开源框架,基于iOS和mac os 网络进行扩展的高性能框架,大大降低了iOS开发工程师处理网络请求的难度,让iOS开发变成一件愉快的事情。
made in 小蠢驴的配图 对于现在大部分iOS开发者来说,无论是在职的,打算跳槽的,或者还在找工作的,亦或还在培训中,将来可能面临找工作的(现在应该比较少了),面试都无疑是一座摆在面前无法逾越的大山了吧,因为确实很多面试问题,可能我们只是偶尔遇到,或者仅仅知道怎么用,但是却没有进行探究,接下来,我来讲一下,面试过程中几乎必问的 @property 关键字问题~ 来自sunnyxx大神的面试题 对于数组,应该算是我们开发中最常见也是最常用的类型之一了,sunnyxx的这个题目,也确实可以考察
做开发的时候,我们经常需要将数据保存在plist文件中,用这种方式来将数据写入磁盘,这样退出 App 再打开的话,上次写入的文件还在。
运行时的文章一直被同学们热炒,当然现在面试中也都喜欢问道,当大伙说的头头是道时候,可到真正的项目中几乎局限只会关联对象或者MethodSwizzling奉为神剑到处挥砍,开发毕竟不能纸上谈兵,实践出真知,介绍目前在项目中runtime的具体使用,真切希望和各位同学探讨。
领取专属 10元无门槛券
手把手带您无忧上云