OC 的那点事儿

本文详细介绍了Objective-C语言的特点,包括其面向对象特性、内存管理机制、类别和继承的区别,以及KVC和KVO等高级特性。同时,还探讨了ARC与GC的不同之处,并解释了NULL、nil等概念。

三、OC 语言的特点:
OC是C语言的一个超集,是C的基础上增加了一个面向对象(OO)的特性;
OC和java都是单继承,C++是多继承;
OC不支持命名空间机制,取而代之的是类名前面加前缀,以此来区分;

面向过程的语言 :都是祈使句,直接和CPU沟通。目的是操作CPU,储存数据,管理数据。


面向对象的语言:在程序中,添加能够接收消息的单元(对象),每个单元拥有自己的功能,各单元合作,完成程序。
面向对象没有具体的官方定义。早期只使用继承、封装、多态编写程序的思想。后来,主要指将生活逻辑映射到程序当中。

一、OC 中常见的用来修饰属性的几个关键字:assign &weak, retain &strong, copy ,nonatomic
   assign:(MRC中)修饰基本数据类型(如:数值类型)
    retain:  (MRC中)保留计数,引用计数 “+1”, 获得对象所有权

    weak:   (ARC中)普通赋值可视为相当于MRC中的assign
    strong: (ARC中)强引用可视为相当于MRC中的retain(告知编译器在合适的地方自动插入retain)

    copy: 复制对象(常修饰字符串),Fundation中的不可变对象使用copy相当于retain
 
    _unsafe , _unretained,与weak功能一直,区别在于对象销毁后,weak会将变量设置为nil, 防止野指针调用。

注:
     nonatomic:非原子性访问,不加同步(多线程并发访问会提高性能)

其他:

由于delegate的非拥有特性,ARC中首选 weak  (weak 和 assign 区别)

因为:weak属性在释放的时候会自动将指针置为nil。而assign不会需要程序员自己手动置空。


内存释放后将指针置空一种推荐的安全做法。因为object c中可以用 nil为对象访问任意属性和方法。如[nil setProperty:someProperty]。但实际nil显然没有这个方法。但是程序实际什么都没做,却不会crash。但是如果一个已经被释 放了内存的非空属性调用任意方法会造成程序crash。


二、OC 中的 NULL,nil,Nil,NSNull

【如题】表示空的事物有四个
【NULL】【nil】【Nil】【NSNull】

NULL:表示基础类型指针为空
int * p = NULL;

nil:表示对象指针为空
id obj = nil;

Nil:表示Class变量为空
Class class = Nil;

NSNull:用在数组字典等数据结构中占位,作为空元素

空的方法(唯一的一个)
[NSNull null]; 创建表示空的对象



 四、#include,#import,@class
#include,#import效果相同,#import可以确保头文件只会被导入以此防止交叉编译;
#import的导入会包含这个类的全部信息,编译效率高,防止相互包含的编译错误 而@class声明名称是类的名称,不考虑类的具体实现,

五、类别和继承
类别:不通过增加子类而增加现有类的方法,增加的方法与原始方法几乎没区别;
        类别不能增加实例变量;
            类别覆盖原始方法后,原始方法不再调用;
继承:


六、内存管理
alloc、copy (mutableCopy)、retain 创建对象后 , 就要用release或者autorelease 释放对象,
其他方法创建对象不需要自己管理内存;
当我们释放对象是调用[super dealloc]方法是因为:子类有些对象是集成父类的,要把父类持有的对象释放

自动释放池的工作:自动释放池是一个NSAutorelease类的一个对象,当一个对象autorelease后,会被自动入池,待池销毁后,将会给池中所有对象进行release;

dealloc中 self.xxx = nil 先调用了  release 方法,还将变量设置为nil , 比直接 release 好。
七、ARC 和 GC
ARC 是Automatic Reference Counting 自动引用计数简称,iOS 5之后内存管理特性。本质还是使用引用计数来管理对象的,只是不需要手动实现release 、autorelease、delloc 方法,编译器会在合适的位置自动生成。
GC 是 garbage collection,内存管理垃圾回收机制,性能没有ARC的好;
iOS 开发有MRC和ARC,mac开发支持GC垃圾回收机制,10.8 废弃了GC改用ARC;
ARC中如果管理不当也会内存泄漏:
如:循环引用,OC和 CoreFoundation类之间的桥接管理不当;
八、堆 和 栈
栈(stack)由编译器分配和释放的,存放参数和局部变量;
堆(heap)由程序员分配和释放的,程序员不释放,内存溢出;
九、深拷贝 和 浅拷贝
浅拷贝:只复制对象本身,不对里面是属性复制
深拷贝:既复制对象,又复制里面的属性

十、KVC 和 KVO
KVC (键值编码)简洁访问对象的实例变量,不通过存取方法可以访问对象的实例变量
KVO (键值观察)获取对象属性变化的通知机制。
要用KVO观察到变化,对象必须采用KVC赋值。KVO建立在KVC基础上的;


十一、线程 进程
一般程序是单个进程,进程是个静态的容器,里面容纳了多个线程,线程是一系列方法的执行路径

十二、代理 block 通知
delegate 和block 用于 1对1 之间的通信
delegate 要定义协议方法,对象实现协议方法,建立了代理关系后才能通信;
block 更加紧凑简洁,不需要繁琐的协议方法,但是通信事件比较多的时候,建议用delegate,block传值为空,可能会发生崩溃。
notification 用于 1对多的 通信但是代码可读性要差一些





本系统旨在构建一套面向高等院校的综合性教务管理平台,涵盖学生、教师及教务处三个核心角色的业务需求。系统设计着重于实现教学流程的规范化与数据处理的自动化,以提升日常教学管理工作的效率与准确性。 在面向学生的功能模块中,系统提供了课程选修服务,学生可依据培养方案选择相应课程,并生成个人专属的课表。成绩查询功能支持学生查阅个人各科目成绩,同时系统可自动计算并展示该课程的全班最高分、平均分、最低分以及学生在班级内的成绩排名。 教师端功能主要围绕课程与成绩管理展开。教师可发起课程设置申请,提交包括课程编码、课程名称、学分学时、课程概述在内的新课程信息,亦可对已开设课程的信息进行更新或撤销。在课程管理方面,教师具备录入所授课程期末考试成绩的权限,并可导出选修该课程的学生名单。 教务处作为管理中枢,拥有课程审批与教学统筹两大核心职能。课程设置审批模块负责处理教师提交的课程申请,管理员可根据教学计划与资源情况进行审核批复。教学安排模块则负责全局管控,包括管理所有学生的选课最终结果、生成包含学号、姓名、课程及成绩的正式成绩单,并能基于选课与成绩数据,统计各门课程的实际选课人数、最高分、最低分、平均分以及成绩合格的学生数量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值