博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Obbjective-C中的个别知识点
阅读量:7010 次
发布时间:2019-06-28

本文共 2547 字,大约阅读时间需要 8 分钟。

 

--------------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

 

 

 

转载于:https://www.cnblogs.com/yilizhijiaotianxiashao-yincaiersanshijianduo/p/4727291.html

你可能感兴趣的文章
LNMP架构搭建(脚本)
查看>>
作为一名Java程序员的必修课+java_框架面试题(含答案)
查看>>
图片文字转word文档文字的方法
查看>>
idea在线生成注册码地址2018已经验证可用
查看>>
AJPFX关于StringBuffer,StringBuilder类总结(二)
查看>>
keepalived+lvs实现lvs的高可用
查看>>
linux下压缩与解压缩以及打包命令详解
查看>>
深入浅出JDBC(二) - Dbutils
查看>>
elasticsearch5.0 环境搭建
查看>>
redis pipe管道
查看>>
git:rejected because the tip of your current branch is behind
查看>>
我的友情链接
查看>>
基层公务员自述:每天擦桌子证明自己还活着(全文)
查看>>
电话营销六种经典开场白
查看>>
wxPython图像相关处理
查看>>
jdbc链接oracle数据库
查看>>
重新配置Synology磁盘模式到RAID5
查看>>
ORA-00845: MEMORY_TARGET not supported on this system
查看>>
完美解决failed to open stream: HTTP request failed!(file_get_contents引起的)
查看>>
安装包大全
查看>>