• oc精简笔记


    首先如果是想在终端学习的话,以下内容是必须的,如果是直接使用xcode的请随意:

    operating system      os       X

    ter   终端的缩写

    ls      显示目录文件夹(Linux命令)

    cc-c   编绎(Linux命令)

    mkdir   建立一个新的子目录(命令)

    fraction  分数   ;denominator       分母    ;numerator   分子

    foundation   基础;   NSobject:Nextstep object的缩写 

    inheritance  继承  ; interface 接口

    • variable  变量  ;instance  实例

    SEL:选择器数据类型

    block:  代码块数据类型

    framework  :工作空间

    注意:

    %i%d都是表示有符号十进制整数,但%i可以自动将输入的八进制(或者十六进制)转换为十进制,而%d则不会进行转换。

    巧记:

    醋(初等比如 ()、->、等)

    坛(单目运算符如!、~、++等)

    酸(算数运算符如*、%等)

    味(位移)

    灌(关系运算符)

    味(&按位与、^按位或)

    落(逻辑运算符  逻辑与等)

    跳(条件比如  :?:)

    福(赋值)

    C语言中:

    计算c=b+++a;时,先把b的值赋给c,b再加一,然后再加 a

    计算c=++b+a;时,先把b加一,再把b的值赋给c,然后再加 a

    Object-C:

    @autoreleasepool   自动释放池跟,与内存管理有关,以后 写代码都写在@autoreleasepool中

     

    @try {//可能出错的代码块}@catch{一旦出错了可以补救的代码@finally{//无论出错不出错都会执行的代码}

    注释补丁vvDument- xcode  在GitHub网站下载

     

    @methodeclaration   方法声明(method 方法)

    @implementation   设计实现

    parameter      参数 

    statement :陈述、声明

     

    类和对象:类是对无数个对象的相同属性的概括,相当于现实中的图纸

    类的设计规范:

    1、类名的第一个字母必须是大写

    2、不能有下划线

    3、多个英文单词用驼峰标识(英文单词首字母要大写)

     

    OC运行过程(终端命令控制):

    touch :如果fileA存在,使用touch指令可更改这个文件或目录的日期时间,包括存取时间和更改时间;

    如果fileA不存在,touch指令会在当前目录下新建一个空白文件fileA

    打开桌面: cd  Desktop

    rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容 

    rm -f file1 删除一个叫做 'file1' 的文件

    rmdir dir1 删除一个叫做 'dir1' 的目录

    cd .. 返回上一级目录 

    删除文件:rm   -f  文件名

    创建文件: touch  文件名

    1、编写oc源文件:.m   、.c

    2、编绎: cc  -c  xxx..m   xxx.c       (注意空格)

    3、链接:cc xxx.o  xxx.o   -framework  Foundation(只有用 了foundation 框架才需要加上-framework Foundation)

    4、运行: ./a.out

    5、编绎加运行:cc  xxx.m 

     

     

     

    OC类第一课:

    #import<Foundation/Foundation.h>

    //oc对象的本质就是结构体

    //类的声明:

    /*NSObject的目的是:让Car 这个类具备创建对象的能力*/

    @interface Car : NSObject

    {

      //用来申明对象属性(实例变量/成员变量,默认会初始化为零)

        int wheels  ;//车轮个数

        int speed ; //时速、速度

    }

    //

    @end

     

    //类的实现:

    @implementation Car

    @end

     

    int main()

    {

    /*oc中,想执行一些行为,就写上中括号【行为执行者    行为名称】

      利用类来创建对象  

         执行了Car这个类的new行为来创建新的对象

         创建出一个新的对象,并且会返回对象本身(新对象的地址)*/

        [Car new];

        return 0;

     

    }

     

    在oc中数据类型的定义 与c语言的区别

    1、 unsigned long  —>NSUInteger

    2、 float —>  CGFloat

     

    oc中方法的权限:

    但是这里要注意的是:OC中的方法是没有修饰符的概念的,这个和Java有很大的区别,一般都是公开访问的,即public的,但是我们怎么做到让OC中的一个方法不能被外界访问呢?

    OC中是这么做的,如果想让一个方法不被外界访问的话,只需要在.m文件中实现这个方法,不要在头文件中进行定义,说白了就是:该方法有实现,没定义,这样外界在导入头文件的时候,是没有这个方法的,但是这个方法我们可以在自己的.m文件中进行使用。

    为什么要介绍这点知识呢?因为在后面我们会说到单利模式,到时候就会用到这个知识点了。

     

    静态方法与实例方法

    方法是类的行为,写在接口和实现两个文件中。在接口部分声明方法,在实现部分实现方法。

    1、类方法与实例方法

    Objective-C中的类可以声明两种类型的方法:实例方法和类方法。实例方法就是一个方法,它在类的一个具体实例的范围内执行。也就是说,在你调用一个实例方法前,你必须首先创建类的一个实例。而类方法,比较起来,也就是说,不需要你创建一个实例。

    +表示类方法,就是类调用方法,不依赖与任何对象的方法,类似于c语言的static关键字 static函数。-表示是实例(对象)方法,只能是对象可调用,依赖与任何对象的方法。

    总结一下几点:

    1)类(static)方法(便利构造器)

    a. 类方法的调用

    [类名称 类方法名称];

    这里需要注意:

    1、类方法可以调用类方法。

    2、类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法。

    3、类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量。

    4、类方法作为消息,可以被发送到类或者对象里面去(实际上,就是可以通过类或者对象调用类方法的意思)。

    2)实例方法

    a.实例方法的调用

    首先需要实例化该类

    例如:Human *man = [Human alloc] init];

    [类的实例 

    实例方法名称];

    例如:[man showSex];   

    注意:此处实例化该类时,调用了该类的构造函数init,并且该类的构造函数调用[super init]的返回值不等于该类的self

    定义子类的实例

    Woman *wife = [Woman alloc] init];

    此处实例化该类时,调用了该类的构造函数init,并且该类的构造函数调用[super init]的返回值 等于该类的self

    2、单例模式

    Singleton模式,即单例模式。顾名思义,主要用于做应用程序的资源共享控制。实质为,单例是在程序声明周期里有且仅有被实例化过一次的类。为确保 实例化的唯一,利用类的类(static)方法来生成和访问对象。至此,我们可以在程序中任何地方访问类的单例对象,因为只实例化唯一的一次,所以,并不 allocinitautorelease初始化方法。

    单例设计模式的要点:

    1) 某个类只能有一个实例。  

    2)他必须自行创建这个对象  

    3)必须自行向整个系统提供这个实例;

    4)这个方法必须是一个静态类;

    .m文件代码(记住)

    @implementation Singleton

    static Singleton *st;

    +(Singleton*) instance{//可用id代替返回可用的指针对象 instance是方法名

    //静态变量,生命周期是整个程序,在下一次该函数调用时仍可使用 ?    if(st==nil ) {//指针为空就创建?         st = [[Singleton alloc] init];

    //指针st指向单例模式 Singleton

          }

        return st;//不是空就继续使用

    }

    @end

    注意:所谓单例,即我们自己创建一个单例类,该类只能生成唯一的对象,为了防止该对象被复制(copy)或者retain release 等操作,我们必须在所创建的单例的实现文件( .m 文件)中将父类的这些方法给覆盖,该目的是为了保证单例模式的一个严谨性。

     

     oc中的继承:

    1、成员访问类型

    private:私有成员,不能被外部函数访问(使用),也不能被子类继承;

    protected:保护成员,不能被外部函数访问,可以被子类继承;

    public:公有成员,可以被外部函数访问,也可以被子类继承。

    OC中,所有的方法(消息),都是公有的。

    2、重写(继承的另一部分)

    子类可以从父类继承方法,但是有时候父类的方法不适合子类,子类就可以写一个自己的同名方法,覆盖掉父类的同名方法,叫做重写。

    重写的时候,在子类的.h中不必重新声明,直接在.m中写实现就可以。

     

     

     1 //父类声明文件

     2 #import <Foundation/Foundation.h>

     3 @interface Father : NSObject

     4 -(void)run;

     5 -(void)jump;

     6 @end

     7 

     8 //父类实现文件

     9 #import "Father.h"

    10 @implementation Father

    11 -(void)run{

    12     NSLog(@"he is running!");

    13     return;

    14 }

    15 -(void)jump{

    16     NSLog(@"father can jump 1.2m");

    17 }

    18 @end

     

     

     1 //子类声明文件

     2 #import "Father.h"

     3 

     4 @interface Son : Father

     5 

     6 @end

     7 

     8 //子类实现文件

     9 #import "Son.h"

    10 

    11 @implementation Son

    12 -(void)jump{

    13      NSLog(@"he can jump 0.6m");

    14 }

    15 @end

     

    其中,子类重写父类的jump方法,不需要重新声明。

    同一个方法,不同的实现,称为多态。重写是多态的一种。

    继承的好处:

      1)创建大量的相似类的时候,可以节省工作量。

      2)使用框架中的类,或已经写好的类,继承该类,生成一个派生类,比原类更好用。

    注意:NSStringNSArrayNSDictionary都是不能够继承的。

    3、虚方法

    OC的方法都是虚方法

      1)父类的指针可以指向子类的对象

    1 Son * son = [[Son alloc] init];

    2 Father * p = son;

    上面pson都指向子类的对象;调用方法时,不看指针,看对象,对象的地址指向什么对象,就调用什么方法,称为虚方法。

      2)调用方法时,不看指针看对象,这样的方法叫做虚方法。虚方法的好处:可以描述不同事物被相同事件触发,产生不同的响应(结果)。

     

    oc中的字符串

     

    字符串的创建:    

    NSString *str1 = @"如果你们不好好学 ";//快速创建

     //快速创建出的字符串内容 是常量, 在常量区内 所以指针相等

        //使用类方法拼接出来的字符串是对象,所以指针地址不同

    /*

        NSString *s1 = [NSString stringWithFormat:@"字符串"];

        NSString *s2 = [NSString stringWithFormat:@"字符串"];

        if (s1 == s2) {

            NSLog(@"s1 == s2");

        } else {

            NSLog(@"指针地址不相同");

        }

     

     

    1   NSString *s1 = [[NSString alloc]initWithFormat:@"age is %d",10];

     

      //c字符串 --->oc字符串

        NSString *s1 = [[NSString alloc] initWithUTF8String:"yuan"];

        //oc字符串 --->c字符串

        const char *s2 = [s1 UTF8String];

     

     

       // NSUTF8StringEncoding   用到中文就可以用这种编码

        NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];

     

    /*

         NSString :不可变的字符串

         NSMutableString :可变的字符串

         */

    前提:必须是可变的字符串

     //必须要用NSMutableString 类来调用,否则都是错的

        NSMutableString *s = [NSMutableString  stringWithFormat:@"i love you"];

    //拼接字符串的方法 :

        [s appendString:@"  sister"];

        NSRange range = [s rangeOfString:@"love"];

        // 除某个范围内的字符串

        [s deleteCharactersInRange:range];

      //获取某段字符串的范围

        NSRange r = [s rangeOfString:@"i"];

        NSLog(@"%@",s);

  • 相关阅读:
    Java 中String、StringBuffer、StringBuilder的差别
    [转载]StringBuffer versus String
    二维数组的连续子数组的最大和
    一位数组的最大和
    js中常见的去重方式
    魅族2016Java互联网方向其中一道笔试题--青蛙跳台阶问题
    美团在线编程2016--最大差值
    [转载]MySQL开发中常用的查询语句总结
    实现字符串全排列
    笔试题---最大子序列和
  • 原文地址:https://www.cnblogs.com/qq1871707128/p/6014721.html
Copyright © 2020-2023  润新知