IOS开发笔记(一)—— Objective-C基础

中山大学数据科学与计算机学院本科生实验报告

(2019年春季学期)


一、实验题目

IOS基础


二、实现内容

  • 学习IOS基础
  • 掌握objective-c的语法
  • 了解ios部分设计模式

三、实验结果

Objective-C学习笔记

1.SmallTalk 式的消息传递模型

在java中,方法调用:

obj.method(argument);

OC中,方法调用:

[obj method:argument];

Objective-C 与其说调用对象的方法,不如说向对象传递消息更为精确。

2.布尔(BOOL)

Objective-C的 BOOL 具有 YES 和 NO 两个值。

3.字符串(NSString)

Objective-C 字符串由双引号包裹,并在引号前加一个@符号

NSString *name = @"HelloWorld";

4.类的定义与实现

方法前面的 +/- 代表函数的类型:加号(+)代表类方法(class method),不需要实例就可以调用,与 Java 的静态方法相似。减号(-)即是一般的实例方法(instance method)。

定义部分,定义类的名称、数据成员和方法。 以关键字 @interface 开始,@end 结束:

@interface MyClass : NSObject {
    int memberVar1; // 实体变量
    id  memberVar2;
}

+ (return_type)class_method; // 类方法

- (return_type)instance_method1; // 实例方法
- (return_type)instance_method2:(int)p1;
- (return_type)instance_method3:(int)p1 andPar:(int)p2;
@end

实现部分,以关键字 @implementation 开始,@end 结束:

@implementation MyClass {
    int memberVar3; // 私有实体变量
}

- (return_type)instance_method1 {
    ....
}

- (return_type)instance_method2:(int)p1 {
    ....
}

- (return_type)instance_method3:(int)p1 andPar:(int)p2 {
    ....
}
@end

5.创建对象

创建对象需通过 **alloc 和 init **两个消息。alloc 是分配内存,init 则是初始化对象。 init 与 alloc 都是定义在 NSObject 里的方法,父对象收到这两个信息并做出正确回应后,新对象才创建完毕。

MyObject *obj = [[MyObject alloc] init];

// 也可以写成
MyObject *obj = [MyObject new];

6.协议 (Protocol)

协议类似与 Java 语言中的接口。

协议的定义以 @protocol 开头,@end 结尾:

@Protocol SayHello
- (void)sayHello;
@end

协议中定义的方法分为必须实现的方法和可选实现的方法。协议中的方法默认必须实现,可选实现的方法以 @optional 为标识,必须实现的使用@required。

@protocol SomeProtocol
 - (void)method1; // 必须实现
@optional
- (void)method2; // 可选实现
- (void)method3; // 可选实现
@end

7.分类(Category)

分类可以给一个已经存在的类增加方法,而不用去改它的源码。

8.属性

属性(property)是 Objective-C 的一项特性,用于封装对象中的数据。实例变量一般通过“存取方法”(access method)来访问。其中,“获取方法”(getter)用于读取变量值,而“设置方法”(setter)用于写入变量值。

  • 属性对应内部变量实体
  • 属性的get/set对应实体方法

@property(*) 括号中的属性内容:

  • 原子性:atomic 和 nonatomic,默认为atomic。
  • 读写权限:readwrite 和 readonly, 默认为 readwrite,同时生成setter和getter,所以本质上是由@synthesize来实现的。而 readonly 就是代表只生成 getter 方法。
  • 指定方法名:使用getter=或setter=来指定方法名。
  • 内存管理:assign,strong,weak,copy。
操作 点语法 使用消息表达式
setter obj.name = val; [obj setName:val];
getter val = obj.name; val = [obj name];

9. 代码块(block)

block 对象是对函数的扩展。除了函数中的代码,block 还包含变量绑定。block 也被称为闭包(closure)。block 是以 “^” 开头为标识的。后面跟的一个括号标示 block 需要的参数列表。

10. MVC模式与MVVM模式对比

  • MVC的思想:一句话描述就是Controller负责将Model的数据用View显示出来,换句话说就是在Controller里面把Model的数据赋值给View
    • Model(模型):是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
    • View(视图):是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
    • Controller(控制器):是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVVM的诞生

  • 而现在的手机App功能越来越复杂,数据结构也越来越复杂,所以数据解析也就没那么简单了。如果我们继续按照MVC的设计思路,将数据解析的部分放到了Controller里面,那么Controller就将变得相当臃肿。还有相当重要的一点:Controller被设计出来并不是处理数据解析的。Controller的作用 1、管理自己的生命周期;2、处理Controller之间的跳转;3、实现Controller容器。这里面根本没有“数据解析”这一项,所以显然,数据解析也不应该由Controller来完成。
  • 专门为数据解析创建出了一个新的类:ViewModel
  • MVVM 中,viewview controller正式联系在一起,我们把它们视为一个组件
  • viewview controller 都不能直接引用model,而是引用视图模型(viewModel
  • viewModel 是一个放置用户输入验证逻辑,视图显示逻辑,发起网络请求和其他代码的地方
  • 使用MVVM会轻微的增加代码量,但总体上减少了代码的复杂性

四、实验思考及感想

第一周的IOS开发课难度有点大,首先是对Objective-C语言的不熟悉,再加上对苹果环境的不熟悉,让我上手比较慢。课上看到工程师敲代码的速度以及方法令人震撼,我得学多久才能到达那样的开发水平。为了更好的学习这门课程,我在课后也仔细了解学习了oc的语法,希望下次课上能更好地跟上老师的讲授。等到真正投身到实际工程中,或许会对ios开发更有感觉,继续努力吧!

你可能感兴趣的:(IOS开发)