美文网首页iOS
初识object-c

初识object-c

作者: 一盘好书 | 来源:发表于2019-05-05 18:27 被阅读44次

    作为一个习惯了Java语言的Android开发人员,初识oc对于其复杂的语法结构是极其不适应的,不过也没办法,自己选的路,头发掉光也得走完。

    因为需要快速入门,所以只是做简单语法的记录,供以后查阅,适用于想快速了解一些oc基本语法的开发人员。

    以下表格需要简单记一下,每次创建一个自定义类时,ide会帮我们生成两个文件,xxx.h头文件,xxx.m实现文件。

    头文件 实现文件
    c语言 .h .c
    oc语言 .h .m

    .h文件我们暂时可以理解为java中的接口,.m文件就是实现了该接口的具体类文件。(因本人相对比较了解Java语言,所以会用java与oc来类比)

    1 创建自定义类

    1.1 创建类

    在xcode中,new file--选中ios,点击cocoa touch class,填写类名,确认保存位置,这时就会出现(类名.h)和(类名.m)两个文件。

    // Student.h文件
    #import <Foundation/Foundation.h>
    
    // 用 @interface 定义一个接口类Student
    // @end 标记这个类结束的位置
    // 这里的冒号是继承的意思
    @interface Student : NSObject
    
    @end
    
    //Student .m文件
    
    // 导入Student接口类
    #import "Student.h"
    
    // 用 @implementation 实现Student接口类,@end 符号
    @implementation Student
    
    @end
    

    从上面可以看出,基本的类结构就是定义文件和实现文件分开,可能这样分工更明确吧。

    1.2 类的初始化

    初始化一个student类,oc中调用方法使用中括号来表示,如下所示。

    // 初始化一个Student对象
    Student *s1 =[[Student alloc]init];
    
    // 调用run方法
    [s1 run];
    

    [Student alloc]这是调用Student alloc方法,为student类开辟内存空间。用类名直接调用,可以理解为java的静态方法。紧接着就是调用init方法进行初始化工作。

    1.3 类的实现

    类中有成员变量和属性,类内使用成员变量,类外使用属性。

    • 成员变量:可以理解为类内之间的属性值,但一般情况下对外部不公开
    • 属性:类似java中的被public修饰的成员变量,可被外部调用。

    以下定义了各种类型的方法,并且分别进行了实现。

    
    //  类内使用成员变量,类外使用属性
    
    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject{
        // 成员变量
        NSString *_personName;
        int _personAge;
        int _personSex;
    }
    
    // 自定义构造方法,注意返回 instancetype 类型
    -(instancetype) initWithPersonName:(NSString*) personName andPersonAge:(int)personAge;
    
    // 成员属性
    @property(nonatomic,strong) NSString *personName;
    
    // 无参数 无返回值 函数
    -(void)run;
    
    // int型返回值,int型参数值 函数,注意冒号后紧跟的就是参数类型和参数名
    -(int)workTime:(int) hour;
    
    // 双参数a 和 andB中的空格不能少
    -(int)plusA:(int)a andB:(int)b;
    
    -(int)plusA:(int)a :(int)b;
    
    @end
    

    具体的实现如下

    #import "Person.h"
    
    @implementation Person
    - (instancetype)init{
        self = [super init];
        if (self) {
            _personName = @"lisa";
            _personAge = 15;
            _personSex = 1;
        }
        return self;
    }
    
    - (instancetype)initWithPersonName:(NSString *)personName andPersonAge:(int)personAge{
        self = [super init];
        if (self) {
            _personName = personName;
            _personAge = personAge;
        }
        return self;
    }
    
    - (void)run{
        NSLog(@"person is running");
    }
    
    - (int)workTime:(int)hour{
        if (hour > 8) {
            return hour;
        }
        return 8;
    }
    
    -(int)plusA:(int)a andB:(int)b{
        return a+b;
    }
    
    - (int)plusA:(int)a :(int)b{
        return a*b;
    }
    
    @end
    

    1.4 在类中的调用

    // 初始化person对象
    Person *p1 =[[Person alloc]init];
    
    // 调用workTime方法,传入一个int型参数9,并返回一个int型值
    int workTime1 = [p1 workTime:9];
    
    // 调用plusA andB方法(这种写法还真是有点恶心)
    [p1 plusA:3 andB:9];
    
    

    2 数据类型

    某些数据类型和java比较类似,就不贴出来,来看看差异比较大的一些类型。

    2.1 string类型

    初始化一段字符串,用@符号加双引号,当不是基础数据类型时,注意加指针符号*。

    NSString *str1 = @"这是文本1";
    // %@符号:字符串占位符
    NSLog(@"str1 = %@",str1);
    
    

    2.2 NSDictionary

    Person *p1 =[[Person alloc]init];
    Person *p2 =[[Person alloc]init];
    
    // p1为value值,@"1"为key值
    NSDictionary *dicPerson = [NSDictionary dictionaryWithObjectsAndKeys:p1,@"1",p2,@"2", nil];
    
    // 取出key为1的值,如下
    Person *p4 = [dic objectForKey:@"1"];
    
    NSString *str1 = @"这是文本1";
    NSString *str2 = @"这是文本2";
    NSDictionary *dicStr = @{str1:@"1",str2:@"2"};
    
    
    
    

    以后还会陆续更新后续的学习内容。

    相关文章

      网友评论

        本文标题:初识object-c

        本文链接:https://www.haomeiwen.com/subject/hytpgqtx.html