• Obbjective-C中的个别知识点


    --------------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
    
     
    
  • 相关阅读:
    MySQL数据库之索引
    python面向对象编程
    linux端口占用
    lintcode
    java基础
    lintcode
    linux 常用命令
    Docker & Kubernates
    angular preparation
    java 命令行
  • 原文地址:https://www.cnblogs.com/yilizhijiaotianxiashao-yincaiersanshijianduo/p/4727291.html
Copyright © 2020-2023  润新知