GeniusWarrior
雨停了,天晴了,感觉自己又行了

 

--------------staticextern----------

static 和 extern都是用来修饰变量(局部的static实际也是全局的)  

 static修饰的变量 只有你的包含那个变量定义的源代码文件可以访问(内部的变量)  

 extern定义的变量的哪个源文件都可以访问 只要声明了就可以(外部变量)  

-------------static对局部变量的作用  

1、延长局部变量的生命周期,从程序启动到程序退出,但是它并没有改变变量的作用域  

2、定义变量的代码在整个程序运行期间仅仅会执行一次  

 extern 不是定义局部变量,它用在函数内部是声明一个全局变量  

------------static 与 extern对全局变量的作用  

全局变量分两种 

 内部变量:static修饰的,默认下,只能在本文件中访问的变量  

外部变量:extern修饰的,默认下,所有的全局变量可以被其他文件访问(有包含关系) 

 ----static作用  

声明一个内部变量  

定义一个内部变量  

由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。  

注意:在不同文件中可以定义同名的内部变量,互不影响  

---------extern作用  

完整定义一个外部变量  

完整声明一个外部变量  

 注意:  

1) 在不同的文件中不可以定义同名的外部变量  

---------static 与 extern对函数的作用  

假设有A、B两个文件  

内部函数:在A文件中定义的函数,在A文件中访问  

外部函数:在B文件中访问A文件中定义的函数,函数在B中称之为 外部函数

 extern修饰函数声明为外部函数

static修饰函数声明为内部函数

 

-------------import和include的区别;

 

include 和 import 都是引入头文件

import引入的头文件,可以防止重复包含

include它是使用预处理指令防止重复包含,如果没有写预处理指令,则无法防止重复包含问题

 

--------------NSLog 和printf的区别:

1,NSLog可以自动换行, 输出调试信息,  printf不能.

2,NSLog 函数的参数是一个NSString 对象

3,printf函数的参数是一个字符串常量指针

-------------依赖关系

A对象作为B对象的局部变量或是方法形参的,B依赖与A,这时候我们称A与B之间存在一种依赖关系

 -----------关联关系,HasA关系:

当一个对象拥有另外一个对象的时候, 当B对象为A对象的成员变量的时候,B对象与A对象之间存在一种关联关系

 

------------------self和super&static:

self和super:

self应用场景:

1)用在类方法中 2)用在对象方法中 3)访问成员变量 4)self在OC的内存管理特殊使用

 1. self理解:   谁调用当前方法, self就代表谁.

比如:  在对象方法中,self代表的是对象,  因为只有对象才可以调用对象方法

在类方法中,  self代表的是类,  因为只有类名才可以调用类方法.

 

注意:  在对象方法中不要使用self调用类方法

在类方法中不要使用self调用对象方法

 2. 在对象方法中可以通过 self->_speed访问成员变量.

 3.  super代表的是当前类的父类.

----------super 的作用

1.直接调用父类中的某个方法

2.super 处在对象方法中,那么就会调用父类的对象方法

  super 处在累方法中,那么就会调用父类的类方法

3。使用场合:子类想重写父类的一些方法时想保留一些父类的行为

 

 -----static关键字:可以使局部变量保留多次调用一个方法所得的值

 

1. 在c语言中  static可以修饰局部变量、全局变量、函数

2. 在OC中, 不能用来修饰实例变量和方法, 但是可以修饰局部变量, 全局变量

 

--------------id和instancetype类型区别

1. id和instancetype都可以用来作为方法的返回值

 

2. id可以用来定义类型,instancetype不能用来定义类型

id  obj;

instancetype  obj2; // 错误

3. instancetype可以精确返回值类型

 -------------分类与继承的区别-----------------

.类别(category)又叫分类,可以在不改变类名和原来类的实现的前提下,实现对类的方法扩展。

  分类不可以增加成员变量,可以增加方法;

  Category可以重载原始类的方法,直接替换掉原来的方法,后果是再也不能访问原来的方法

  类别文件命名时,是原类名+扩展标识名

 

格式例:

    @interface Student: NSObject

    -(void) print;

    @end

 

    声明文件Student+Play.h

    #import "Student.h"

    @interface Student(Play)

    -(void)play;

    @end

    实现文件Student+Play.m

    #import "Student+Play.h"

    @implementation Student(Play)

    -(void)play{

        NSLog(@"Student-->play");

    }

    @end

 

 

 

2.继承,抽取相同代码,建立了类之间的关系,不改变原来模型的期初上,拓充方法。

  子类继承父类,拥有父类的属性,也可以增加成员变量和方法

  子类重新实现父类中的某个方法,覆盖父类以前的做法

 

格式例:

  

  @interface Person: NSObject  // 父类声明

  @end

    @interface Student : Person

    @end

 

 

 

 

posted on 2015-08-13 14:49  GeniusWarrior  阅读(177)  评论(0编辑  收藏  举报