Xcode & Objective-C 简介 | 青训营笔记

331 阅读4分钟

Xcode & Objective-C 简介 | 青训营笔记

这是我参与「第四届青训营」笔记创作活动的的第1天

1 Xcode

1.1 简单介绍

XcodeIcon.png

Xcode 是苹果公司推出的一款开发工具,第一个版本于2003年推出,截至目前最新的版本是14.0。

它集合了 编译,测试,Git,甚至能直接将你的App提交到 AppStore 去做审核。

1.2 Xcode工程体系介绍

  • Workspace:Workspace 是 Xcode 提供的一个工作空间,一个Workspace可以包含多个project,可以通过多个Project分工组合成一个庞大且复杂的工程
  • Project:Project 是一个工程的核心,你可以透过它来管理源代码,资源文件,添加其他三方库...等等,一个Project 可以包含多个 Target XcodeIcon.png

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

调用.语法来使用gettersetter方法

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 将对象计数器加1
  • readonly 表示只读属性 只会生成getter方法 不会生成setter方法
  • readwrite 默认值,表求生成setter和getter方法
  • nonatomic 非原子访问,不加同步,多线程并发访问提高性能

4 协议Protocol

协议用来解决对象之间通信问题,特别是当视图类对象向控制器类对象通信(发送用户点击动作、请求设置视图数据)时,常使用协议。通过协议可以进一步提升该类的通用性,例如,对于某个按钮的点击动作,在所有遵守协议的对象中,可以定义不同的动作。

在iOS开发中,可以定义各种各样的协议,常见的有代理协议、数据源协议等。

// ByteDancerProtocol.h
@protocol SeniorLevel <NSObject>
- (void)doCodeReview;
@end

5 小结

  1. 熟悉Xcode工程体系
  2. .h文件和.m文件的区别
  3. 变量与属性的区别,属性的Getter,Setter方法如何灵活使用

6 引用参考

Targets介绍

协议

Xcode & Objective-C 简介