码迷,mamicode.com
首页 > 其他好文 > 详细

OC知识点盘点

时间:2015-08-20 14:55:18      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:

1./#import 和 /#include 的区别是什么? #import<> 和 #import" " 的区别是什么?

他们都属于预处理指令,其功能都是包含头文件,但是#import 避免了头文件重复包含问题,如果在使用#include 的时候,需要加入头文件卫士的预处理指令,#ifndefine   #define    #endif ,如果使用了 #import 就意味着不需要加入头文件卫士即可以实现不重复包含的功能。
    #import <> 其功能是包含头文件的时候,首先从系统目录开始查找,主要用法是用于包含系统框架的头文件。
    #import “ ” 其功能是包含头文件的时候,首先在工程的当前目录下开始查找,如果找不到的话,就从系统目录开始找,其主要用法是用于包含自定义的头文件。 

2.id声明的对象有什么样的特性?

id 是一个指向oc 对象的指针类型,称其为万能指针。通俗的理解:就是可以指任何oc 的对象,当他指向任意的对象的时候,在运行时表现的具体的对象,这一点说明它具有在动态的特点。需要注意的是,在使用id 类型的时候,不要在 id 后加*,因为其本身就是指针类型。

3.手动管理内存的基本原则是什么?使用@property 的时候如何避免内存泄露?

如果使用new copy alloc 方法创建的对象,其引用计时器为1,那么我们就需要负责释放这个对象release。
如果使用retain这样的方法,让对象的引用计数器+1,我们就需要调用release方法释放这个对象,必须保证retain 和 release方法成对出现。
如果使用了@property,在手动管理内存的时候,如果在@property 声明的时候,用到 retain 和copy 关键字,那么在初始化对象的时候,不要使用点语法,直接使用成员变量的名字,同时需要复写 dealloc 方法,在dealloc 方法里,需要释放该成员变量。如果是ARC 环境,则需要在 dealloc方法里,将成员变量指向nil.

4.iOS 平台,出现nil,Nil,NULL,NSNull, 从字面意思上来看,他们都表示空,但是他们真正的意思是什么?分别有什么区别?

__DARWIN_NULL 将常量0,强制转换为void *,其意思是表示一个空的地址。表达含义这个指什么都没有指向。
#define __DARWIN_NULL ((void *)0)
NULL 本质上也是 ((void *)0)其主要作用,C 语言风格的指针,表示指向空的时候,使用 NULL.
#ifndef NULL
#define NULL    __DARWIN_NULL
#endif  /* !NULL */
Nil用于表示Object-C类型(Class)的值为空的情况
#ifndef Nil
# if __has_feature(cxx_nullptr)
# define Nil nullptr
#  else
# define Nil  __DARWIN_NULL
# endif
#endif
nil 用于表示Object-C中对象指针表示空值的时候。
#ifndef nil
# if __has_feature(cxx_nullptr)
#   define nil nullptr
# else
#   define nil __DARWIN_NULL
# endif
#endif
NSNll 其本质是一个类类型,它表示语义为空对象。
@interface NSNull : NSObject <NSCopying, NSSecureCoding>

+ (NSNull *)null;

@end
总结一下:不管是NULL, nil ,还是Nil 它们的本质都是((void*)0),指向一个表示空的地址也就是平时空指针。这样做的意义是,可以根据赋的初始值, 来确定对象的数据类型, 如果是NULL,表示C风格的指针类型, 如果Nil表示Objective-C类类型, 如果是nil.表示Objective-C中对象.NSNull 本身表示类类型的空对象。

5 .深拷贝和浅拷贝有什么区别? 浅拷贝其本质, 仅仅将对象指针复制了一份, 也就是内存还是原来的内存。深拷贝:重新向系统申请了内存,并把原来的数据全部按照深拷贝的方式复制了一份,浅拷贝在手动管理内存的模式下, 相当于引用计数器加了1。他们的主要区别就在于深拷贝重新分配了内存, 深拷贝是我们一般情况下理解的复制。

OC知识点盘点

标签:

原文地址:http://www.cnblogs.com/zhaozhengshi/p/4744901.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!