这是我参与「第四届青训营 」笔记创作活动的的第1天
xcode工程体系介绍
感觉学习资料里写的很详细,就贴一下原文
Workspace、Project、Target、Product
引用:Xcode工程体系介绍
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来调用其他类函数
@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中使用 创建对象 的语句。【贴一下文档中的代码】
引用:对象与构造函数(网址定位不准)
函数方法
+类方法(c++静态函式)和 -类函数(实例方法)
+(int)methodNameWith:(int)para1 paraLabel:(double)para2
看文档中的代码,interface声明并有对应的implementation,看差不多能看懂,但是用应该不会和不顺手,也是.h和.m
引用:函数方法(网址定位不准)
函数调用
通过两个方括号包起来 方框 - 类名 - 方法签名 - 方框
ByteDancer *byteDancer2 = [[ByteDancer alloc]
initWithName:@"James"];
❓这里的意思是,[ByteDancer alloc]是一个函数调用,调用结果是个类名,在外部的函数调用中被使用嘛
成员变量
公开、私有
看代码
引用:函数方法
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框架(动态的替换方法的实现指针) 黑魔法
实战
还有错误,完成后再更新吧