iOS

初识object-c

2019-05-05  本文已影响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 类的实现

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

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


//  类内使用成员变量,类外使用属性

#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"};



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

上一篇下一篇

猜你喜欢

热点阅读