OC学习阶段性小结

news/2024/7/20 15:08:12 标签: 内存管理, 设计模式, c/c++

        /*一、1.OC是一门面向对象的语言。扩展了标准C语言的类与接口。OC能完成的操作:定义新的类、类的实例和方法、方法调用(成为发消息)、属性声明(以及通过他们自动合成存取方法)、静态和动态类型化、块(block)已封装的 可在任何时候执行的多段代码、基本语言的扩展,例如协议和类别。

            2.面向对象编程也叫做面向接口编程,简称:OOP(Object Oriented Programming)。

            3.类和对象是面向对象的核心。

            4.类:具有相同特征和行为的事物的抽象。

            5.面向对象的三大特征:封装、继承、多态

        二、类 1.OC中的超类(根类)只有一个:NSObject,类是由接口和实现两部分构成的,类的接口和实现可以同时放在在.h文件中,一对.h和.m文件可以定义并实现多个类。类名与文件名无关。

            2.方法分为类方法(+)和实例方法(-)。类方法只能通过类发送消息,实例方法只能通过对象发送消息。<注>什么是方法名?(参数形容词+:::)称为方法名。

            3.实例变量的可见度:@public,@protected,@private

            4.继承 上层:父类,下层:子类(subClass)。继承是单向的,不能相互继承。子类能继承父类全部的特征(非@private)和行为

        三、1.#include 拷贝,出现一次,拷贝一次.h文件,会重复导入,会造成循环引入。

            2.#import 拷贝,xcode进行了优化,不会重复导入,但会造成循环引入。

            3.#class 拷贝,告诉编译器@class后的字符串作为类名使用,并未导入接口内容,可以避免嵌套循环导入。

        四、API文档 快速打开方法:option+左键(点击reference超链接进入帮助文档) /command+左键(头文件)

            基本信息:

            1.inherits from 继承自

            2.Conforms to 遵循什么协议

            3.Framework 属于哪个框架

            4.Availability 什么时候可⽤的

            5.Declared in 声明在什么头文件里

            6.Related documents 相关⽂文档

            7.Sample code ⽰示例代码

        五、foundation框架是Cocoa编程,iOS编程的基础框架包括:字符串、集合、日期和时间等基础类。

        

            1.字符串类:基本方法见书本总结。NSNumber用于把基本数据类型包装成字符串。

            2.集合类:集合包括数组(NSArray),字典(NSDictionary)、集合(NSSet),集合所存元素为对象,不能是基本数据类型,集合皆可以直接打印,但一般只在调试的时候直接打印,实际应用中使用for-in循环打印.

                 //NSString *string = @"lanou";

                 //string = [string capitalizedString];

                 //NSLog(@"%@",string);

                 //NSArray *array = [NSArray arrayWithObjects:string,@"xuesheng",nil];

                 //NSSet *set = [NSSet setWithObjects:[NSNumber numberWithDouble:3.21f],string,nil];

                 //NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:array,@"1",set,@"2" ,nil];

                 //NSLog(@"%@",dict);

                 {//字典打印形式

                 1 =     (   //数组打印形式

                 Lanou,               //数组元素1

                 xuesheng             //数组元素1

                 );

                 2 = "{(\n    Lanou,\n    3.210000038146973\n)}";    //集合打印形式

                 }

                2.1数组 数组有序,可以按照下标索引对应的数组元素,遍历数组使用for-in循环。

                2.2字典 字典无序 存放的是key-value键值对(条目/entry),key值和value值都只能是对象,其中,key值不可相同,若初始化时相同,则只存储靠前的的key-value键值对,若初始化后添加,则新的key-value对会替换掉前面的key-value对。

                2.3集合 集合无序,不能有重复的元素,使用集合可以过滤掉一组对象中重复的对象。NSCountedSet是NSMutableSet的子类,能记录元素的重复次数,在set的基础上添加了技术功能。

                2.5数组排序 默认使用升序排序。

         六、Block:块语法,本质上是匿名函数(没有名称的函数)标准形式:int (^名)(int) = int ^ (int a){return 2*a;};

         

         七、字面量(语法糖)是一种简易表示值的方法

         八、NSDate和NSDateFormatter  通过date获取的当前时间永远是0时区的时间,NSTimeInterval(即double类型)用以表示以秒为单位的时间间隔。NSDateFormatter是iOS中的日期格式类,功能是实现NSString和NSDate的互转。

            标准格式:

             NSDateFormatter * formatter = [[NSDateFormatter alloc] init];

             [formatter setAMSymbol:@"AM"];

             [formatter setPMSymbol:@"PM"];

             [formatter setDateFormat:@"YY-MM-dd hh:mm:ss aaa"];

             NSString * currentDate = [formatter stringFromDate:[NSDate date]];

         九、类的扩展

            1.Category也叫分类或类目,主要作用是为没有源代码的类添加方法,通过Category添加的方法会成为原类的一部分,从而达到扩展一个类的功能,等同于该类原有的方法。

            2.Extension的主要作用是管理类的“私有”方法。

                格式:

                 #import "Person.h"

                 

                 @interface Person ()//注意:该“()”不可删除

                 -(void)insideMethod;

                 @end

                 

                 @implementation Person

            3.Protocol(协议)协议是一套标准(一堆方法的声明),只有.h文件。接受协议的对象实现协议中定义的方法。

                Protocol的核心使用场景是实现delegate(代理)设计模式

         十、1.属性 @property   @synthesize  属性的属性(attribute)包括读写属性(readonly、readwrite)、原子属性(atomic、nontomic)和语义属性(assign、retain、copy),其中assign多用于修饰基本数据类型,retain(赋值时做内存优化) 适用于对象类型 、copy (复制一个副本,需要实现copy协议的类才可以使用)适用于特殊的对象类型(比如:字符串)。

                copy方法的实现:

                 Person.h⽂文件

                 @interface Person : NSObject<NSCopying>       //声明部分

                 

                 Person.m⽂件

                 @implementation Person

                 - (id)copyWithZone:(NSZone *)zone{                    //实现部分

                 Person *p = [[Person allocWithZone:zone]init];
                 p.age = self.age;

                 p.name = self.name;

                 return p;

                 }

             2.协议语义属性是assign,block的语义属性是copy

             3.注意不同语义属性修饰下setter和getter方法的写法。

         十一、点语法 在MRC环境下,点语法会调用set或者get方法,而_instance不会调用,因此,在get 和 set方法中不能使用点语法实现,而要使用_instance实现,否则会出现嵌套死循环。在初始化时,必须使用点语法实现,负责内存释放时会出现野指针。

         十二、KVC(Key-Value-Coding)键值编码,是一种间接访问实例变量的方法。当key值不存在时,会执行setValue:forUnderfineKey:系统默认是抛出一个异常。重写setValue:forUndefinedKey:和valueForUndefinedKey:可以防止Key写错造成的程序崩溃。例如:

                 -(void)setValue:(id)value forUndefinedKey:(NSString *)key

                 {

                 NSLog(@"没有这个%@",key);

                 }

         十三、1.OC内存管理的方式:垃圾回收、ARC、MRC,其中,iOS中使用以引用计数机制为基础的ARC和MRC内存管理方式。OC采⽤用引用计数机制管理内存,当一个新的引⽤用指向对象时,引用计数器就递增,当去掉一个引用时,引用计数就递减。当引用计数到零时,该对象就将释放占有的资源。

             2.使用MRC管理内存的原则,自己使用alloc、retain、copy导致的引用计数+1,都要使用release或者Autorelease-1,而系统自带的方法导致的引用计数+1,不需要release,当一个对象的引用计数减到0时,编译器会自动调用dealloc方法,释放该对象。

             3.使用autoreleasepool时,pool会把接收到的autorelease对象以压栈的方式给保存起来,[pool release];时,pool会向之前保存的对象逐一发送release消息。

         十四、MRC内存管理方式下dealloc方法,永远不要手动调用dealloc

         十五、collection的内存管理:collection会自主管理自己内部的元素,加入collection中的对象会被retain,移除collection的对象会被release,collection被释放会对内部所有的对象release

         */

转载于:https://www.cnblogs.com/jyq-blog/p/4491248.html


http://www.niftyadmin.cn/n/1811334.html

相关文章

百度竞价点击价格如何计算?百度竞价点击价格的计算公式及方法

转于&#xff1a;http://www.mahaixiang.cn/jjjq/833.html 百度竞价后台只能设置关键词出价&#xff0c;意思是每次点击所支付的最高价格。其实相同的关键词每次点击的价格都不一定是相同的。下面小编带大家了解下竞价点击价格的计算方法。 每次点击价格的计算公式为&#xff1…

【code vs】 2780 ZZWYYQWZHZ

2780 ZZWYYQWZHZ 题目描述 Description可爱的小管在玩吹泡泡。忽然&#xff0c;他想到了一种排序。。。。。。。 输入描述 Input Description第一行输入n,表示有n个数。&#xff08;n>20&#xff09; 以下n行输入n个数&#xff0c;表示要排序的数&#xff08;数字长度不超过…

让 人 流 泪 的 手 机

推荐人&#xff1a;qwe0828 2005-5-23 16:18:01 一天&#xff0c;正走在路上&#xff0c;手机响了&#xff0c;话筒里是个稚嫩的小女孩的声音&#xff1a;“爸爸&#xff0c;你快回来吧&#xff0c;我好想你啊&#xff01;”凭直觉&#xff0c;我知道又是个打错的电话&a…

iOS开发日记12-广告轮播collectionView

今天博主有一个利用collectionView制作广告轮播图的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. 制作广告轮播图较为简单,但其中可用三种方法: 1.使用ScrollView制作,简单明了 2.使用TableView制作,将tableview与cell同时改变transform,旋转90,实现轮播 3.使用Col…

中国军工企业自建磁悬浮列车为何令德日震惊?

时间&#xff1a;2006年03月28日09:58 【来源&#xff1a;中青在线】 据中青在线-青年参考报道&#xff0c;中国将修建上海至杭州的磁悬浮列车线&#xff0c;并计划今年年底正式动工的消息&#xff0c;引来国外媒体纷纷报道。其中&#xff0c;德国与日本对中国磁悬浮的关注…

阿里云邮推定制版 首创按量计费模式

5月8日消息&#xff0c;阿里云邮正式对外发布升级定制版&#xff0c;首创全新的按量计费模式。区别于按账户数购买模式&#xff0c;这种按量计费的方式&#xff0c;可以在一定程度上减少资源浪费&#xff0c;使大中型公司在企业邮箱方面的成本投入平均降低40%。 电子邮件已成为…

opencv-python 线稿素描提取

在网上找一个人物图像,想提取他的素描,怎么做 找到图像 然后运行代码 得到结果 如果想知道更多处理方法, 比如哈哈镜的原理和代码 怀旧老照片的生成 油画算法的实现 漫画风格等等 本期的线稿代码如下: #参考PS素描的实现步骤,先

static变量生命周期 在php和java中的不同

<%! static class Count { private static int count 0; public static int getCount(){ count; return count; } } %> <% out.print(Count.getCount()); %> 通过浏览器连续访问&#xff0c;会分别输出&#xff1a;1,2,3,4,5,6,........ <?p…