前言
-
Objective-C
以后简称Objc -
下文中有需要补充的备注
注
-
本文可能不全,收集了很多地方的知识归纳起来,供大家和自己学习与巩固基础知识
-
如果有不对的地方欢迎各位及时指出,采取对答的形式编写
1、Objective-C
语言是由Smalltalk
演化而来,Smalltalk
是消息型语言的鼻祖。
注:Objc语言是使用“消息结构”而不是“函数调用”,它们之间的区别在于:使用消息结构的语言,其运行时所应执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器决定。
2、Objective-C
是C
的“超集”,所以C语言中的所有功能都在编写Objective-C
代码时依然使用。
注:理解C
语言的内存模型,有助于理解Objective-C
的内存模型以及“引用计数”机制的工作原理
3、Objective-C
是一门面向对象的语言
注:什么是对象?有句话叫做万物皆对象。什么是类?“类”是对一群具有相同特征或行为事物的统称,抽象的。不能直接使用。
4、#import
指令能防止重复引用,如果#import
多少次,在预编译的时候只会引用一次
5、Objective-C
是一门面向对象的语言
6、什么是框架
答:框架是一种把头文件、库、图片、声音等内容聚集在一个独立单元中的集合体。苹果公司将Cocoa、Carbon。QuickTime和OpenGL等技术作为框架集成来提供。Cocoa的组成部分有Foundation和Application Kit(AppKit)框架。还有一套支持型框架,包括了Core Animation和Core Image。Foundation框架处理的是用户界面之下的那些层(Layer)的特性,比如数据结构和通信机制
7、什么是框架
8、Objective-C是什么?
OC是一种通用,高级,面向对象的编程语言。它扩展了标准的ANSI C编程语言,将Smalltalk式的消息机制加入到ASNI C中,它是苹果的OS X和iOS操作系统及j其相关API、Cocoa和Cocoa Touch的主要编程语言。
9、什么是Xcode
Xcode是苹果提供的用来创建iOS和OS X应用程序的开发环境。
10、m文件
Objective-C刚诞生的时候,扩展名.m代表message,它指的是Objective-C的一个主要特性;
11、分别说明一下C与OC中如何实现文件的多次引用
C:使用#indef命令的方案来避免一个文件包含另一个文件而后者又包含前者的情况。
OC:使用#import命令来实现。
12、到底什么是OOP(面线对象编程)
OOP是一种编程架构,可构建由多个对象组成的软件
13、解释下类(class)、对象(object)、实例(instance)、消息(message)、方法(method)、方法调度(method dispatcher)、接口(interface)、实现(implementation);
类:是一种表示对象类型的结构体
对象:是一种包含值和指向其类的隐藏指针的结构体。
实例:是“对象”的另一种称呼;
消息:是对象可执行的操作,用于通知对象去做什么。
方法:是为响应消息而运行的代码
方法调度:是Objective-C使用的一种机制,用于推测执行什么方法一响应某个特定的消息。
接口:是类为对象提供的特殊描述
实现:是使用接口能正常工作的代码
14、什么是继承
继承是在两个类之间建立关系的一种方式,它可以避免许多重复的代码。
15、OC不支持多继承,那么如何实现多继承的效果
通过Objective--C的其他特性来达到多继承的效果,如类别(category)和协议(protocol)
16、什么是复合
将多个组件组合在一起,配合使用,从而得到完整的作品。在Objc中,复合是通过包含作为实例变量的对象指针实现的
如:@interface ZYCArrrs:NSObject{
DZCArr * dzCArr;
FTCra * ftCArr;
}
17、self = [super init];
为了让超类将所有需要的初始化工作一次性完成,你需要调用【super init】。init方法返回的值就是被初始化的对象。将[super init]返回的结果赋值给self
是Objc的惯例。这么做是为了防止超类在初始化过程中返回的对象与一开始创建的不一致。
18、复合还是继承
继承的类之间建立的关系为“ is a”(是一个);
复合的类之间建立的关系为“has a”(有一个);
19、.mm文件
如果用.mm做文件扩展名,编译器就会认为你是用Objective-C++编写的代码,这样你就可以同时使用C++和Objective—C来编程了。
20、Xcode中的调试器
GDB:GDB是GNU计划的一部分,可以在各种平台上兼容。
LLDB:
21、为什么CGPoint、CGSize等是C语言的struct结构体而不是对象呢?
因为所有OBjc对象都是动态分配的,而动态分配是一个代价比较大的操作,它会消耗大量的时间。
所以将这些结构体创建成第一级的对象会在使用过程中大大增加系统开销。
22、类方法和类对象
Objective-C运行时生成一个类的时候,会创建一个代表该类的类对象。类对象包含了指向超类、类名和类方法列表的指针,还包含一个long类型的数据
为新创建的实例对象指定大小。
如果你在声明方法时添加了加号,就是把这个方法定义为类方法。这个方法属于类对象(而不是类的示例对象),通常用于创建新的实例。我们称
这种用来创建新对象的类方法为工厂方法。
23、==与isEqualToString的区别
==是比较指针的数值
isEqualToString时比较对象的大小
24、NSString是一旦被创建,便不能改变
25、NSString与NSMutableString在Java中的比较
NSString就想Java中的String一样,而NSMutableString则与Java中的StringBuffer类似。
26、NSArray类的两个限制
首先数组只能存放Objective-C的对象,而不能存储原始的C语言的基础数据类型,如int、float、enum、struct和NSArry中的随机s指针。
不能在NSArray中存储nil
27、对象的生命周期
1.对象的诞生(通过alloc或new方法实现)
2.生存(接收消息并执行操作)
3.交友(通过复合以及向方法传递参数)
4.死去(被释放掉)
28、ARC是一个单线程的操作。一旦你转换成ARC版本,就不可以恢复了
29、__bridge、__bridge_retained、__bridge_transfer
__bridge:这个类型的转换会传递指针但不会传递它的所有权;
__bridge_retained:
30、与异常有关的关键字
- @try:定义用来测试的代码块以决定是否要抛出异常。
- @catch:定义用来处理已抛出异常的代码块。接收一个参数,通常是NSException类型,但也可能是其他类型。
- @finally:定义无论是否有抛出异常都会执行代码块,这段代码总是会执行
- @thorw:抛出异常
这些都是我看书《Objective-C基础教程》总结的一些知识,便于自己巩固学习,也还在不断的总结完善。有不对的地方还望各位不吝赐教!谢谢
网友评论