OC基础笔记3

来源:互联网 发布:云舒网络 拖欠工资 编辑:程序博客网 时间:2024/05/16 15:29
51,SEL类型,每个方法都有一个与之对应的SEL类型的对象,SEL对象可以找到它的地址去调用它,也是一个指针类型。把一个方法包装成sel类型的数据,在需要时根据数据去类对象那里找,找到了就执行。只要成功配对,并缓存,下次直接用。注意对象方法和类方法的不同用法。包装和调用方法如下:
参数最多只能传递两个,而且一定要是对象做为参数。
52,使用sel来判断是否含有某个方法
sel也可以用来做为形参来带入别的指定方法给一个方法
53,在同一个main程序中,import进来的类,可以通过方法互相调用另一个类的对象和sel方法
54, 内存管理只用在oc的对象上,因为oc对象是放在堆里的,而堆是要手动释放或程序结束时回收,栈是通过系统自动释放的。非对象类型一般放在,所以不需要内存管理(如int char float double struct enum等类型的变量以及指针变量
55,包括通过alloc,copy,new创立的对象,都需要手动释放。当程序结束后,指向对象的指针会自动释放,指针指着的对象如果没有释放,就会发生内存泄漏,所以要在程序结束之前手动释放对象。
56,引用计数器,可以监控对象正在被引用的次数,这引用指的是有强指针指着,计数为零时进行自动释放。属于4个字节的整数类型,每个对象创建时计数都为1。通过retainCount消息(对象自带的属性)查看当前计数的大概值
57,在必要时,通过retain和release来增加或减少计数值。retain方法返回对象本身release无返回内容
58,在对象准备释放时,会自动调用dealloc方法,dealloc一旦被重写,就必须在方法末尾调用super的dealloc方法(因为创建对象时也调用了super的init方法)。
59,MRC:manul手动refrence引用counting计数,早期计数方式。
60,ARC:automatic自动refrence引用counting计数,编译器自动在适当的时候去计数,自动在编译时用retain等,针对对象的释放。
61,_func_方法,打印调用者以及它发送的当前消息。%s占位符
62,还被指针指着的对象若提前被释放了,就会成为僵尸zomble对象,指着僵尸对象的指针变成了野指针,给野指针发送消息时就会报错。设置编辑里有个监听僵尸对象的设置,遇到时会有报错提示(比较常用)。
63,全局断点,
64,空指针发送消息不会发生错误,保守起见在释放对象之后将指针设置为空指针。p=nil
例如:[_text release]; _text = nil;或者利用set中的release,直接self.text = nil;
65,
66,为了防止同类的对象进行传递,要将set方法修改成只对不同的对象做处理,避免重复传递。因为 当类的属性也是一个类时,使用set方法往往需要对象的参与,那么一定要在set方法中将传递的对象retain一次,并先将属性处于空的状态。
67,每个对象属性都在set方法retain,(而且在对应在dealloc中要release),太重复了。只需要在@property的修饰符中,加上(retain)修饰词,就在set中自动生成retain方法。相对的,assign是普通的getset方法,默认的,多数用于基本数据类型。
68,在iOS多线程中,多数都是nonatomic修饰property,(一个房间同时有几个门,可以同时进几个人),但系统默认的是atomic,(一个房间就一个门,多人的话要排队进入)。这个修饰符是@property一定要写的,其他修饰符用逗号隔开即可。

70,一个类也可以成为自己的属性之一。相当于自己的一个属性在创建对象时可以指向另一个和自己一样的对象作为属性的赋值,例如,转发别人的微博的同时,自己本身也是一条微博。当对象作为属性时,只能通过指针来引用。
72,通常情况需要简单地引用一下另一个类的内容,import一个类,等同拷贝了那个类的整个文件内容,可共用很多东西。但由于import是预编译指令,若有改动会实时更新并重新拷贝,那么所有与这个文件相关的每个头文件都要进行重新拷贝,会导致多个文件 编译效率减慢。可以将#import “xxx.h” 放在类的.m文件中,即使更改内容,也只是在.m中重新拷贝,而不是在.h文件,不会影响到别的类。但这样在头文件中声明x类就会报错,以为这个类不存在(之前是直接import类的头文件在头文件里),所以还要在头文件先声明它的存在@class xxx;与.m中的import呼应。
73,@class还可以应用在互相作用的两个类之间,因为互相import是会陷入死循环的。
74,而两个对象互相拥有,会发生循环retain,因为互相retain最终两个都计数器为一,就都无法调用dealloc释放它们所调用的对方。 办法就是让其中一个类不要对对方进行retain,将修饰符改为assign,同时dealloc里的release也要去掉
0 0
原创粉丝点击