第二节:Xcode & Objective-C 简介| 青训营笔记

161 阅读3分钟

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

xcode工程体系介绍

感觉学习资料里写的很详细,就贴一下原文

Workspace、Project、Target、Product

引用:Xcode工程体系介绍

网址:juejin.cn/post/712271…

objective-c

类的介面(声明、定义)和实现

interface 介面、声明、定义 方法中不需要写实现,但需要有个对应实现 implementation 实现 给interface做方法实现(interface中没有的当作私有函数,在该区块内可访问)

声明文件.h 和 实现文件.m

.m不能被引入(import),如图(来自于学习资料),a.h 可以被 a.m 引入,a.h 和 b.h 可以相互引入,b.m 可以引入 b.h, a.m 和 b.m 没有引入关系。 .m要靠引入.h来调用其他类函数

引入关系图(来自学习文件).png

@implementation只能在实现文件.m里,只能被这个文件里的其他类调用
@interface能在.h(能被其他的两种文件引用)和.m(只能被这个文件里的其他类调用)

❓类的实现只能在实现文件中,是类的实现 引用 同个文件中的.h或.m的 类的声明,给它做方法实现的意思吗

创建对象、构造函数

ByteDancer *byteDancer1 = [[ByteDancer alloc] init];//❗️*号是对象指针

在创建对象前,有 #import "DyteDancer.h" 语句,ByteDancer应该是个类,有父类可重写,重写函数需要调用父类的响应函数;

也可以通过interface声明,构造个新的函数:在ByteDancer.h中interface个名为ByteDancer的类,在ByteDancer.m中implementation这个类,并构造新函数(也要调用父类的响应函数);最后在main.m中使用 创建对象 的语句。【贴一下文档中的代码】

引用:对象与构造函数(网址定位不准)

网址:juejin.cn/post/712271…

函数方法

+类方法(c++静态函式)和 -类函数(实例方法)
+(int)methodNameWith:(int)para1 paraLabel:(double)para2

看文档中的代码,interface声明并有对应的implementation,看差不多能看懂,但是用应该不会和不顺手,也是.h和.m

引用:函数方法(网址定位不准)

网址:juejin.cn/post/712271…

函数调用

通过两个方括号包起来 方框 - 类名 - 方法签名 - 方框

ByteDancer *byteDancer2 = [[ByteDancer alloc]
initWithName:@"James"];

❓这里的意思是,[ByteDancer alloc]是一个函数调用,调用结果是个类名,在外部的函数调用中被使用嘛

成员变量

公开、私有

看代码

引用:函数方法

网址:juejin.cn/post/712271…

oc语言特性

property性质

通过get,set方法访问类中的变量(面向对象封装性)

❓能理解get,set,“自动声明的变量是带底线的”是什么意思,这种底线"_name"?自动声明的变量带底线,私有变量不应该没有底线来区分嘛(是不是写错了自动声明的没有底线)
❗️变量和属性的区别,如下代码

//错误用法
//(在属性生成的Set方法设置属性 (Set方法)) -> 死循环
// ByteDancer.m
@implementation ByteDancer
// 覆盖 Set 方法
- (void)setName:(NSString *)name {
    self.name = [NSString stringWithFormat:@"%@ %@", name, @"!"];
}
@end
//正确用法
// ByteDancer.m
@implementation ByteDancer
// 覆盖 Set 方法
- (void)setName:(NSString *)name {
    _name = [NSString stringWithFormat:@"%@ %@", name, @"!"];
}
@end

作者:青训营官方账号
链接:juejin.cn/post/712271… 来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

协议

类遵守协议(Interface)

id<SeniorLevel> //遵守seniorLevel的类

@property(strong, nonatomic) id<SeniorLevel> myMentor;//myMentor类型是任何遵守id<myMentor>的类

类实现协议(implementation)

方法=讯息传递

使用Runtime框架(动态的替换方法的实现指针) 黑魔法

实战

还有错误,完成后再更新吧

main.m.png

MyJsonParser.h.png

MyJsonParser.m_1.png

MyJsonParser.m_2.png

ByteDancer.h.png

ByteDancer.m.png

运行产物.png