ARTS 打卡 Week 02
每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章
Algorithm
Review
这篇文章是讲WebRTC的基础原理,及实现了Android端的demo。
第一部分,用图示+语言描述清楚了WebRTC的核心能力:跨平台P2P实时通信原理;
第二部分,用WebRTC SDK新版本API实现了一个camera本地预览和一个通过google stun服务器来P2P通信的例子。
我按照示例代码,跑通了第一个例子。基本没有碰到障碍。
Tip
使用BFG对一个4gb的iOS工程进行清理,文件大小上限限制在20mb,.git目录体积从3.6gb减少至900多mb.
Share
针对objc“奇怪”语法的个人理解
Learn Objective-C in Y minutes
先看如下代码及注释:
而wiki中的解释是:
Objective-C is a general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language.
所以简单理解这个语法设计如下:
[myObject xxxMessage:@"xxx"]; 这个看起来是“像”是给myObject传递消息
myObject.xxxMessage("xxx"); 这个看起来是调用myObject的xxxMessage方法(执行体)
理解了这个概念,发现再看objc的语法就“顺眼”了很多。当然,如wiki所言,将objc理解为“增加了对象消息传递机制的C语言”的话,就更容易理解objc的很多语言细节。
此外,站在2020年的当口,回看1980年代发明的objc,的确会觉得啰嗦。
有了上面的理解,再读下下面这段话:
The Objective-C model of object-oriented programming is based on message passing to object instances. In Objective-C one does not call a method; one sends a message. This is unlike the Simula-style programming model used by C++. The difference between these two concepts is in how the code referenced by the method or message name is executed. In a Simula-style language, the method name is in most cases bound to a section of code in the target class by the compiler. In Smalltalk and Objective-C, the target of a message is resolved at runtime, with the receiving object itself interpreting the message. A method is identified by a selector or SEL — a unique identifier for each message name, often just a NUL-terminated string representing its name — and resolved to a C method pointer implementing it: an IMP.[18] A consequence of this is that the message-passing system has no type checking. The object to which the message is directed — the receiver — is not guaranteed to respond to a message, and if it does not, it raises an exception.[19]
啊呀,即便为一个已知语言(C)添加OOP能力,也有不同的路径啊,而它们之间的不同是消息名和方法引用的代码如何执行:
C++ (Simula-style programming model): 方法名在大多数情况下是编译后目标class的一个代码块的边界(naming bound)
Objective-C (Smalltalk-style messaging passing model): 一个消息的目标是在runtime确定的,由消息接收object自己解释该消息,而一个方法被识别为selector or SEL -- 每个消息的唯一标识(通常只是一个NUL结尾的string),并解析为一个C函数指针(一个IMP)。因此,消息传递系统是没有类型检查的。消息的接收对象不保证会响应一条消息,且如果不响应,它会抛出一个异常。
版权声明: 本文为 InfoQ 作者【teoking】的原创文章。
原文链接:【http://xie.infoq.cn/article/6f38ff4f612157c0485f7aa9f】。文章转载请联系作者。
评论