当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS基础学习总结(OC基础总结)

iOS基础学习总结(OC基础总结)

2018年09月18日  | 移动技术网IT编程  | 我要评论

现代启示录高清下载,15949977999,龙岗影院

1.oc基本语法

1.手动编译链接的方法:cc -c xx.m cc main.o - framework foundation

2.实际上bool类型的变量:是1个有符号的char变量.

3.面向过程与面向对象:

面向过程:在遇到1个需求的时候,实现这个需求的每1个步骤都是自己写代码亲自的去一步步的实现.这样的解决问题的方式我们就叫做面向过程的方式.

面向对象:在遇到1个需求的时候,不要亲自去实现而是找1个专门做这件事情的人来帮助我们搞定.这样的解决问题的方式就叫做面向对象的解决方式.

 

面向对象的解决问题的优点:后期的维护和修改十分方便.

 

4.对象:对象是现实生活中的1个具体存在.看得见、摸的着.拿过来就可以直接使用.

类:类是对一群具有相同特征或者行为的事物的1个统称.抽象的.不能直接使用.

5.内存中的五大区域.

栈 存储局部变量.

堆 程序员手动申请的字节空间 malloc calloc realloc函数.

bss段存储未被初始化的全局变量静态变量.

数据段(常量区)存储已被初始化的全局静态变量常量数据.

代码段存储代码.存储程序的代码.

6.类加载:在程序运行期间当某个类第1次被访问到的时候.会将这个类存储到内存中的代码段区域.这个过程叫做类加载.

7.分组导航标记: #pragma mark分组名 #pragma mark - #pragma mark -分组名

 

8.数据类型:是在内存中开辟空间的1个模板.

 

2.封装

1.nsstring最常用的类方法和对象方法

+ (instancetype)stringwithutf8string:(const char *)nullterminatedcstring;

+ (instancetype)stringwithformat:(nsstring *)format

length方法

-(unichar)characteratindex:(nsuinteger)index;得到字符串中指定下标的字符.

- (bool)isequaltostring:(nsstring *)astring;判断相等的方式.

- (nscomparisonresult)compare:(nsstring *)string;比较字符串的大小.

2.匿名对象:如果我们创建1个对象,没有用1个指针存储这个对象的地址.也就是没有任何指针指向这个对象那么这个对象就叫做匿名对象。

3.对象与对象之间的关系.组合关系依赖关系关联关系继承关系

 

3.继承与多态

1.oc中的static关键字.

a. static不能修饰属性也不能修饰方法.

b. static可以修饰方法中的局部变量.

2.super只能访问方法,不能访问属性。

3.里氏替换原则 --- lsp

子类可以替换父类的位置.并且程序的功能不受影响.

4.多态:指的是同1个行为,对于不同的事物具有完全不同的表现形式.

4.oc特有语法

1.取到存储方法的sel对象,sel s1 = @selector(方法名);

2.内部的原理:

1).先拿到存储sayhi方法的sel对象,也就是拿到存储sayhi方法的sel数据. sel消息.

2).将这个sel消息发送给p1对象.

3).这个时候,p1对象接收到这个sel消息以后就知道要调用方法

4).根据对象的isa指针找到存储类的类对象.

5).找到这个类对象以后在这个类对象中去搜寻是否有和传入的sel数据相匹配的.

如果有就执行如果没有再找父类直到nsobject

 

3.动态类型检测判断

1).判断对象中是否有这个方法可以执行.

- (bool)respondstoselector:(sel)aselector;最常用的是这个方法.

2).判断类中是否有指定的类方法.

+ (bool)instancesrespondtoselector:(sel)aselector;

3).判断指定的对象是否为 指定类的对象或者子类对象.

- (bool)iskindofclass:(class)aclass;

bool b1 = [s1 iskindofclass:[person class]];判断s1对象是否为person对象或者person的子类对象.

4). 判断对象是否为指定类的对象 不包括子类.

- (bool)ismemberofclass:(class)aclass;

[s1 ismemberofclass:[student class]];

判断s1对象是否为1个student对象.不包括student的子类对象.

5).判断类是否为另外1个类的子类.

+ (bool)issubclassofclass:(class)aclass;

4.无论如何,记住重写init方法的规范.

- (instancetype)init

{

if(self = [super init])

{

//初始化当前类的属性的代码;

}

retrun self;

}

5.内存管理

1. 内存管理的原则

1). 有对象的创建,就要匹配1个release

2). retain的次数和release的次数要匹配.

3).谁用谁retain. 谁不用谁release.谁负责retain谁就负责relase

4).只有在多1个用户用的时候才retain少1个用户使用的时候才release

2.野指针

c语言中的野指针:定义1个指针变量.没有初始化.这个指针变量的值是1个垃圾值,指向1块随机的空间.这个指针就叫做野指针.

oc中的野指针:指针指向的对象已经被回收了.这样的指针就叫做野指针.

3.在mrc的开发模式下.1个类的属性如果是1个oc对象类型的.那么这个属性的setter方法就应该按照下面的格式写.

- (void)setcar:(car *)car

{

if(_car != car)

{

[_car release];

_car = [car retain];

}

}

还要重写dealloc方法.

- (void)dealloc

{

[_car release];

[super delloc];

}

4. 在arc机制下.当对象被回收的时候.原来指向这个对象的弱指针会被自动设置为nil

5. @property的参数

atomic nonatomic retain assign strong weak readonly readwrite setter getter

6. 使用命令使arc mrc兼容 使用命令. -fno-objc-arc

 

5.分类 延展 协议

1.分类只能增加方法,不能增加属性。

2. 本类中的真私有属性在分类中无法直接访问.

3. 为自带的类写分类这个就叫做非正式协议.

4. 分类的作用

1).将臃肿的类分为多个模块方便管理.

2).扩展1个类.

5. 延展

分类中只能新增方法.而延展中任意的成员都可以写.

 

分类中可以写@property但是只会生成getter setter的声明.延展中写@property会自动生成私有属性也会生成getter setter的声明和实现.

6. 延展天生就是来私有化类的成员的.

如果类的成员只希望在类的内部访问,那么就将其定义在延展中.

如果类的成员允许被外界访问定义在本类的@interface中.

7. block代码块

int (^myblock3)(int num1,int num2);

8. block的实现

int (^myblock3)(int num1,int num2) = ^int(int num1,int num2){

int num3= num1 + num2;

return num3;

};

9. 协议protocol

作用:

1).专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明).

2).只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法声明.而不用自己去定义.

10. @required 与 @optional 修饰协议方法是否必须实现

11. 什么是代理模式.

传入的对象,代替当前类完成了某个功能,称为代理模式.

12. 利用协议实现代理模式的主要思路.

1).定义1个协议.里面声明代理类需要实现的方法列表.比如这里的1个代理类需要实现wash cook方法.

2).创建1个代理类(比如猪猪)遵守上面的代理协议并实现方法

3).在需要代理的类中,定义1个对象属性类型为id且遵守代理协议的属性.

4).在代理的类中,调用代理对象的方法.

6.foundation框架的常用类与方法

1.nsstring的方法

1. - (bool)writetofile 字符串写入文件

2. + (instancetype)stringwithcontentsoffile 从文件读取字符串

3. 把路径包含到url中 nsurl *url = [nsurl urlwithstring:@"xxxxxx"];

+ (instancetype)stringwithcontentsofurl: 通过url读取文件中的数据

4. - (bool)writetourl: 写入到url指向的文件

5. - (nscomparisonresult)compare:(nsstring*)string 字符串比较 返回一个枚举类型 -1 0 1 其中nsorderedascending = 1 可以加参数来指定忽略大小写 6. - (bool)isequaltostring: 判断字符串是否相等 7. - (bool)hasprefix - (bool)hassuffix 判断字符串是否以指定的字符开头或结尾 8. - (nsrange)rangeofstring:(nsstring*)string 在字符串中搜索子串 9.字符串的截取: -(nsstring*)substringfromindex: -(nsstring*)substringtoindex: -(nsstring*)substringwithrange:range 10:获取指定下标字符:-(unichar)characteratindex:index 11.字符串转化为其他数据类型:string.intvalue string.doublevalue 12.将oc字符串转化为c字符串 char *str1 = str.utf8string; 将c转化为oc +(instencetype)stringwithutf8string:str1

2.关于nsrange cgpoint cgsize cgrect

 

1.nsrange range = [nsrange nsmakerange(3,7)]; 创造一个range结构体变量并初始化

2.nsstringfromrange(range) 将一个结构体变成字符串输出

3.cgpointmake cgrectmake cgsizemake


3.nsmutablestring 的方法

1.-(void)appendstring: 添加字符串 2.-(void)appendformat: 拼接方式添加字符串

4.nsarray的方法

1.+(instancetype)arraywithobjects:.....nil; 创建一个nsarray数组 2.-(id)objectatindex:index 得到指定下标的元素 3.array.count 得到元素个数 4.-(bool)containsobject:(id)object 是否包含某个对象 5.-(nsuinteger)indexofobject:(id)anobject 查找某个元素第一次在数组中出现的位置 6. nsarray *arr = @[a,b,c,d]; 简要初始化 7.-(void)enumerateobjectsusingblock:..... 代码块遍历数组 8.将数组连成字符串: -(nsstring*)componentsjoinedbystring 9.将字符串以指定符号分隔成一个数组 -(nsarray*)componentsseparatedbystring:@"#"

5.nsmutablearray的方法

1.-(void)addobject: 2.-(void)addobjectsfromarray 3.指定下标插入 -(void)insertobject:xxx atindex:xx 4.删除指定下标 -(void)removeobjectatindex:index 5.删除指定值元素 -(void)removeobject:object; 6.删除指定范围内元素 -(void)removeobject: inrange:

6.nsdictionary的方法

1.[nsdictionary dictionarywithobjectsandkeys:a,keys,b,key,c,keyc,nil];

2.nsdictionary *dic = @{keya:a,keyb:b,keyc:c};

3. .count 键值对的个数 4.根据键取到值:-(id)objectforkey:key 5.遍历也可以用block enumeratekeysandobjectsusingblock:

7.nsmutabledictionary的方法

1.增加键值对 setobject:xx forkey:xx 2.删除指定键 键值对 :removeobjectforkey:xx

8.nsdate方法

1.格式化日期输出

nsdate *date = [nsdate new];

nsdateformatter *fom = [nsdateformatter new];

fom.dateformat = @"yyyy-mm-dd hh:mm:ss";

nsstring *str = [fom stringfromdate:date];

 

2.将格式化输出的字符串转化为nsdate

nsdateformatter *fom = [nsdateformatter new];

fom.dateformatter = @"yyyy-mm-dd hh:mm:ss";

nsdate *date = [fom datefromstring:str];

3.计算两时间之差

timeintervalsincedate:xxx

4.得到时间的各个部分可以使用日历对象nscalendar

 

7.nsfilemanager相关

1.单例模式 nsfilemanage *mng = [nsfilemanager defaultmanager];

2.打开文件时 先判断是否存在 fileexistsatpath: isdirectory:

再判断是否有权限去读写 iswritablefileatpath isreadablefileatpath isdeletablefileatpath

最后再去操作访问文件

3.获取信息的方法

拿到文件的属性信息 attributesofitematpath

拿到所有子孙文件目录 subpathsatpath

拿到所有一级子目录 contentsofdirectory

4.创建文件 creatfileatpath

5.在指定目录创建文件夹 creatdirectoryatpath

6.copy文件 copyitematpath: topath:

7.移动文件 moveitematpath: topath:

8.删除文件 removeitematpath: 直接删除,不进废纸篓

8.copy与单例补充

1.copy调用了copywithzone 方法 此方法定义在nscoping协议中。可以自己重写这个方法来自定义copy,要注意继承nscoping

2.alloc方法内部调用了allocwithzone方法 可以通过重写allocwithzone来达到创建单例模式对象的目的,但要求提供类方法名,类方法名必须以shared或者default开头

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网