Xcode & Objective-C 简介 | 青训营笔记
这是我参与「第四届青训营」笔记创作活动的的第1天
1 Xcode
1.1 简单介绍
Xcode 是苹果公司推出的一款开发工具,第一个版本于2003年推出,截至目前最新的版本是14.0。
它集合了 编译,测试,Git,甚至能直接将你的App提交到 AppStore 去做审核。
1.2 Xcode工程体系介绍
- Workspace:Workspace 是 Xcode 提供的一个工作空间,一个Workspace可以包含多个project,可以通过多个Project分工组合成一个庞大且复杂的工程
- Project:Project 是一个工程的核心,你可以透过它来管理源代码,资源文件,添加其他三方库...等等,一个Project 可以包含多个 Target
2 Objective-C
2.1 介面与实现
Objective-C是一门面向对象语言,可以理解为在C语言之上加了一层,在OC的代码中使用C语言代码也是完全合法,可以通过编译的。
一个Objective-C的类由两部分组成,一个是类的定义或叫做介面 Interface,第二个是这个类的实现 Implementation。
Interface:
// 开始
@interface People : NSObject
// 属性, 方法声明
// Interface中 方法不需要写实现
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSUInteger age;
//暴露在外面的方法的方法声明
- (void)sayHello;
@end
// 结束
implementation :
// 开始
@implementation People
- (void)sayHello {
// 方法实现
NSLog(@"My name is %@", self.name);
}
- (void)privateMethod {
// 只有在implementation能使用本方法
NSLog(@"I'm %lu years old", self.age);
}
@end
// 结束
2.2 .h 文件 和 .m文件
声明文件: .h
实现文件.m
-
其中类的 @interface ,它可以写在 .h文件,也可以 放在 .m文件,
- 如果放在 .h 文件,那这个介面里的声明,它就能被其他的 .h 或是 .m 引入后进而被调用
- 如果放在.m 文件里,那他就叫做类扩展。
// 类扩展
@interface People ()
// 私有属性
@property (nonatomic, copy) NSString *secret;
@end
@implementation People
@end
-
而 @implementation 就只能写在 .m文件里
- 需要在.m文件的顶部引入.h 文件,才能在实现代码里调用其他类的函数
- 需注意.m文件是不能被引入的,只能引入.h,所以你想让其他.m调用方法,必须把它都声明在.h
2.3 成员变量
// People.h
@interface People: NSObject {
//公开
NSString *name;
}
// People.m
@implementation People {
// 私有
int age;
}
@end
可见度
@public
:公有的,可以被类的内部,外部,其他类使用
@private
:只能在该类内部访问
@protected
:只能在该类或者该类的子类访问
3 Objective-C 语言特性
3.1 @property属性
- 使用特性我们可以避免手工编写繁琐的setter 和 getter方法,避免因为这些方法来内存的问题,同时也节省编写代码的时间。
- @property 新的编译器指令,主要功能是为我们自动“生成”,setter和getter方法的声明和实现。
// People.h
@interface People: NSObject
@property (nonatomic, copy) NSString* name;
@end
调用.
语法来使用getter
和setter
方法
setter
- (void)setName:(NSString *)name {
_name = name;
}
getter
- (NSString *)getName {
returne _name;
}
注意:这样会造成死循环(在属性生成的Set方法设置属性 (Set方法))
- (void)setName (NSString *)name {
self.name = name;
}
3.2属性特性
assign
简单赋值,主要用于基本数据类型copy
创建一个新的对象,新的对象和旧对象是独立的两个对象retain
将对象计数器加1readonly
表示只读属性 只会生成getter方法 不会生成setter方法readwrite
默认值,表求生成setter和getter方法nonatomic
非原子访问,不加同步,多线程并发访问提高性能
4 协议Protocol
协议用来解决对象之间通信问题,特别是当视图类对象向控制器类对象通信(发送用户点击动作、请求设置视图数据)时,常使用协议。通过协议可以进一步提升该类的通用性,例如,对于某个按钮的点击动作,在所有遵守协议的对象中,可以定义不同的动作。
在iOS开发中,可以定义各种各样的协议,常见的有代理协议、数据源协议等。
// ByteDancerProtocol.h
@protocol SeniorLevel <NSObject>
- (void)doCodeReview;
@end
5 小结
- 熟悉Xcode工程体系
- .h文件和.m文件的区别
- 变量与属性的区别,属性的Getter,Setter方法如何灵活使用