很好的参考:https://www.runoob.com/w3cnote/objective-c-tutorial.html
Objective-Objective-C是C语言的严格超集:任何C语言程序不经修改就可以直接通过Objective-C编译器
Objective-C被描述为盖在C语言上的薄薄一层
Objective-C里,对象之间互相传递消息。


参考:https://www.yiibai.com/objective_c/objective_c_functions.html
Objective-C编程语言中方法定义的一般形式如下
- (return_type) method_name:( argumentType1 )argumentName1
joiningArgument2:( argumentType2 )argumentName2 ...
joiningArgumentn:( argumentTypen )argumentNamen {
body of the function
}
示例:
/* 返回两个参数的最大值 */
- (int) max:(int) num1 secondNumber:(int) num2 {
/* 局部变量声明 */
int result;
if (num1 > num2) {
result = num1;
} else {
result = num2;
}
return result;
}
[object method] 调用object对象的method方法
对象具备了方法,程序员就可以发出指令 [object method],让一个对象去执行它的方法,也就是“调用对象的方法”。
在 Objective-C语言里,方法和实现的关系不是在编译时决定的,而是在运行时决定的。
举例:
- (void) setColorToRed: (float)red Green: (float)green Blue:(float)blue; /* 声明方法*/
[myColor setColorToRed: 1.0 Green: 0.8 Blue: 0.2]; /* 调用方法*/
协议是一组没有实现的方法列表,类似Java中的"接口"
任何类都可以声明自身实现了某个协议
@protocol起始,@end结束,中间为方法列表
@protocol Locking
- (void)lock;
- (void)unlock;
@end
OC中经常使用 NSObject *object = [[NSObject alloc] init]; 这行代码去创建一个对象
通过对alloc底层源码的分析, 可以了解到:
① alloc的主要目的是开辟内存空间;
② 主要的核心逻辑是 计算内存大小->申请内存空间->绑定isa;
③ 计算内存大小是按照16字节对齐的。
参考:https://www.cnblogs.com/mysweetAngleBaby/p/16747295.html
比如
objc_msgSend(v6, "addScriptMessageHandler:name:", self, CFSTR("windmill"));
含义是调用v6这个对象的addScriptMessageHandler:name:方法,方法的参数1是self,参数2是CFSTR("windmill")
根据addScriptMessageHandler:name:方法的定义:
(void)addScriptMessageHandler:(id<WKScriptMessageHandler>)scriptMessageHandler name:(NSString *)name;
addScriptMessageHandler:name: 是 WKUserContentController 类的一个实例方法
id,参数名是scriptMessageHandler,形参名称省略(第一个参数可以没有形参名称,后面的参数必须有形参名称)NSString *,参数名是name,形参名称是namebool __cdecl -[SpotifyAppDelegate application:openURL:options:](
_TtC24MusicApp_ContainerWiring18SpotifyAppDelegate *self,
SEL a2,
id a3,
id a4,
id a5)
{
……
}
该方法对应的方法签名是- (bool)application: (UIApplication *)application openURL: (NSURL *)url options: (NSDictionary
所以: