GeekBand——iOS第六期第二周学习笔记

一、  OC中的对象类型

OC中对于数据的处理都是采用将简单的数据类型封装成对象这种方式,这和C语言就有很大的不同。

1.1 字符串类

  在C语言中,我们知道没有真正的字符串类型,一般是用数组去保存字符串。但是在OC中,NSString这个类,用于对字符串进行处理。

三种初始化方式:

1. 字面量初始化: 

NSString *str=@"hello world";

2. 初始化器方法:

NSString *str1=[[NSString alloc]initWithString:str];

NSString *str2=[[NSString alloc]initWithFormat:@"你好"];

3.工厂方法:

NSString *str3=[NSString stringWithFormat:@"大家好"];

不难发现NSString中存储的是指针,其指向堆上的值。其实NSString已经将字符封装成了对象了。str不仅能调用堆上的值,还能调用NSString类中的实例方法。

*在OC中NSString还有“共享机制”这种特殊的存储规则,其目的是减少内存的使用。其会将值想等的内存共享给不同的对象。这样做会引发几条现象:

(1):有效减少内存的占用;

(2):NSString中保存的值不会改变。

 也就是说,当使用工厂方法给 str赋新值的时候,相当于重写赋予一个对象,而不是改变str指向的值。

如果要频繁改变字符串的值。可以使用NSMutableSring。其是NSString的子类。取消了共享机制,并且增加了许多的类方法与实例方法方便开发者对值进行操作。

NSMutableString有一个特点需要注意,NSMutableString是动态的字符串,其内存大小在初始化后,如果在使用中存储的字符串超出了预定的内存大小。NSMutableString将自动重写分配一次内存大小,其大小为原内存的两倍。重点是这种操作给予计算机的负担特别大。会影响程序的效率。

1.2 集合类

OC中有三种集合类。

NSArray类,是有序的数组。

NSSet类,是无序的集合类,并且不能存储相同的集合元素。其规则和数学中的集合极为相似。

NSDictionary是键值对的存储方式。

三种类均有对应的Mutable子类。

NSMutableArray超过预设的存储大小,程序的效率会更低。这是因为在超过预定长度时,编译器会作三件事:(1) 分配新的堆内存,2倍于原内存。

                             (2) 将原来堆内存上的元素拷贝到新内存

                             (3) 释放原来堆内存

三种类都只能存储对象。如果要将简单的数据类型存储在集合中,必须封装成类。

基本类型用NSNumber封装。结构类型用NSValue封装。

注意:三种集合类虽然具有长量性(长度和元素指针都不能更改)但是指针指向的对象内部可以更改。

三种集合类的初始化方式和一些常用的类方法与实例方法就不在详述。应该自己下阅读官方文档,和进行必要的练习。

内存模型为:保存一个存储在栈上的地址。这个地址指向堆上保存的所有对象的值地址。堆上的对象地址就是数组保存的值。

for in 是最快的内存遍历方法!

二、ARC机制

  是OC中的内存管理机制,其作用相当于Java中的垃圾回收机制,但是和Java最大的不同是其是短时回收机制,这就决定了OC跟适合运用于应用软件的开发,而Java更适合做服务器的开发。

ARC全称为:Automatic Reference Counting(自动引用计数),ARC的出现将程序猿从繁复的内存管理中解放出来。现在OC默认开启ARC。

ARC管理三种对象:1.OC对象指针。2.Block指针。3.使用_attribute_((NSObject))定义的typedef

ARC不管理以下三种类型:1.值类型(简单值类型,C语言struct)2.使用其它方式分配的堆对象(如使用malloc分配)3.非内存资源

OC中当ARC管理的对象引用计数为零的时候将自动被释放,新建一个引用类型对象(alloc,new,copy),引用计数将变为1,而以下四种操作将增加引用计数:

(1) 将对象引用赋值给其它变量或常量。(2) 将对象已用赋值给其它属性或实例变量(3)将对象传递给函数参数,或者返回值 (4)将对象加入集合中

以下四种操作将减少引用计数:

(1)将局部变量或全局变量赋值为nil或其它值。(2) 将属性赋值为nil或其它值。 (3)实例属性所在的对象被释放。 (4)参数或局部变量离开函数 (5) 将对象从集合中删除

放于@AutoRelease Pool中的对象将会函数结束时自动释放,@AutoRelease Pool可以嵌套使用,目的是创建大量对象后,需要立即释放。

三、协议、类别与扩展

3.1协议

在Xcode中Command+N,选择Objective—C file,可以快速创建一个OC的协议。

协议有如下特点:1.协议能继承多个协议。2.协议只有.h文件,意味着,只能声明方法和定义属性。并不能实现它们。3.一个类能同时遵守过个协议。

协议中默认都是@require类型,其意味着这些属性和方法必须在遵守协议的类中实现。但是写在@optional下的属性或方法可以选择实现。

提示:可以用conformsToProtocol:检查对象是否实现了协议。

以下协议是OC中经常用到的官方协议,需要下来多学习与熟悉:

NSObject、NSCopying、NSMutableCopy、NSFastEnumeration、NSCoding。

3.2 类别与扩展

类别和扩展都是为原有存在的类添加新的方法。但是两者间有着较大的区别。

类别:能在不知道类的源文件的情况下为原有的类添加方法,可以类方法也可以是实例方法,但是不能添加成员变量和属性。类别自身有独立的.h和.m文件。并且能被子类继承。命名规范为:类名+扩展名。类别有个功能是为特别大型的类进行分割实现。

扩展:必须知道类的源文件。其没有独立的.h和.m文件。其接口和实现均写在被扩展类的.m文件着,这意味着扩展中定义的实例变量和方法都是私有的。外部不能调用。只能在类内中调用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容