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

零碎的知识点

时间:2016-08-08 22:49:48      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

分类有什么好处呢?

分类可以实现团队开发的便利性,也就是说一个类可以有多个人来实现。另外,分类也可以用来对系统自带的类进行扩充。

那么使用分类有哪些注意点呢?

1、 Category可以访问原始类的实例变量,但不能添加变量,只能添加方法。如果想添加变量,可以考虑通过继承创建子类。

2、Category可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法。

3、多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效。

4、类中方法调用的优先级是:分类(最后编译的分类优先级最高)> 原来类 > 父类。

 

为什么类方法不能使用实例变量?

类方法的使用没有创建对象,在堆区中就没有为实例变量分配存储空间,实例变量就没有值,访问就没有意义。

匿名类:
使用匿名类访问成员变量(能,只能访问一次),以后再次访问实际上访问的是新空间.

 

Set的优势:1)不让数据暴露在外面,保证了数据的安全性。2)对设置的数据进行过滤。

 

OC中static关键字的使用:
1)可以使局部变量延长生命周期
2)变为静态变量,位于程序的全局数据区
3)若作为全局变量,可将声明放到实现文件的开始部分


self在类方法中使用,指代的是当前类
【对象名 class】返回的是当前类(地址)
NSLog(@“Person =%p”,[p class]);

用在对象方法中
指代的是调用当前方法的对象
就是说当一个对象调用对象方法的时候,在被调用的对象方法内,用self指代自己,可以再次调用其他对象方法(能够达到着这种效果的方法,还有一种,那就是将本对象作为参数传递到自己调用的方法中)
self存储的是堆区对象的首地址,和对象名存储的地址一样(self可能存放在内存堆区)

 

多态

用一个基类的指针指向子类的对象,在函数调用时可以调到正确版本的函数。

1、用一个基类的指针指向一个子类对象

2、用一个基类的指针当函数的形参,用这个指针可以接受到任何它的子类对象也包括他自己。

3、在复合类中,尽量引用高层次的类(基类的指针)当做类的成员变量,这样就可以通过它创建出他所对应的任何子类对象包括它自己。

 

self和super:self是指当前的对象的指针,super是指向父类的指针。

MRC下,程序中(alloc,copy, retain)必须要和release成对出现。

当使用初始化方法初始化一个对象时,有三处可能导致程序错误:1、方法的参数。2、执行父类的init方法。3、类中特有实例变量的初始化。

 

野指针:定义的指针变量没有初始化,或者说,指向的空间已经被释放

内存泄漏:指针没了,空间还在。

Person *p = [[Person alloc] init]; p存在栈区,[[Person alloc] init]堆区。

如果栈区的p已经释放了,而栈区的空间还没有释放,堆区的空间就被泄漏了。

 

nil:如果一个【对象】没有被赋值,默认的是nil

Nil:给【类对象赋值】   NULL:通用指针,空指针。

【NSNul null】:是一个对象,他用在不能使用nil的场合

【nil run】 没有任何效果,但是也不会报错。

d = nil;可以给对象赋值      Nil可以给类赋值

多个对象的野指针问题:

当有多个对象需要release的时候,比如:人用车,在重写人release的时候,在其中先release车,这个,不会造成人被释放,无法找到相应的车,造成车的内存泄漏。

 

对于对象作为另一个类的实例变量

人有一条狗

Dog *_dog;

-(void)setDog:(Dog *)dog

{

    if (_dog != dog)  //判断对象是否是原对象

    [_dog release];  //release旧值

    _dog = [dog retain];  //retain新值并且赋值给实例变量

}

 

继承:在子类中大大减少代码的缩写量,十分方便维护程序。

 

我们在OC中定义一个类的时候,它的成员变量默认情况下是@protected的。这是因为我们的成员变量一般不允许直接去访问,如果需要修改和访问成员变量我们就要用到成员变量的set方法和get方法。

平常写代码的时候要注意在set方法里写上对传入的数据的判断,以避免传入的数据不合理。

当省略成员变量的时候,@synthesize可以省略,@synthesize会自动在方法的实现中对成员变量进行定义,而且定义的成员变量是@private类型的。当省略@synthesize时我们的@property又会自动生成@synthesize代码,所以我们可以只写@property就可以实现定义变量、声明set和get方法和实现set和get方法。

  • 为什么使用set和get方法?

  这是因为我们的成员变量要进行封装,不能让外部直接对变量进行修改和访问。这提高了安全性的同时也可以让我们不需要去关注实现的细节。

  • 总结:

  1、set方法和get方法是用来对数据进行设置和取值的。

  2、在set方法中我们可以对传入的数据进行判断,以防止输入一些不合理的值。

  3、我们可以利用@property来实现set和get方法的声明,利用@synthesize对set和get方法进行实现。这样可以简化我们要输入的代码。

  4、定义属性的时候最好在前面加上下划线。

  

 

零碎的知识点

标签:

原文地址:http://www.cnblogs.com/songlei0601/p/5751189.html

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