草庐IT

OC方法交换swizzle详细介绍——不再有盲点

原文链接:https://www.jianshu.com/p/e95ca2e14731如果对方法交换已经比较熟悉,可以跳过整体介绍,直接看常见问题部分整体介绍方法交换是runtime的重要体现,也是"消息语言"的核心。OC给开发者开放了很多接口,让开发者也能全程参与这一过程。原理oc的方法调用,比如[selftest]会转换为objc_msgSend(self,@selfector(test))。objc_msgsend会以@selector(test)作为标识,在方法接收者(self)所属类(以及所属类继承层次)方法列表找到Method,然后拿到imp函数入口地址,完成方法调用。typede

深入理解OC的运行时(Runtime)

序(吐槽)  前段时间刚面试了几人,面试过程中遇到了比较让人尴尬的问题,这里先吐槽一些:技术层面(部分) 1.runtime方面,网上的runtime文章基本都是千篇一律的,很多都是死记硬背为了应付面试,没有实质性的东西;其实也不是说听不进去,针对于个人来说,runtime其实是一种编程思想,是动态多态的一种实现机制,所以想听到的更多的是关于自己对语言的独特见解,个人看来这十分重要,可能是以后在IT领域所能达到的高度 2.设计模式方面,不会不要紧,因为这本身就是个经验活,这里多插一句,本人看来,设计模式这个东西脱离不了语言特性,这可能与大部分人的见解是北道而驰的,但我不是否定编程思想,只是有些

「基础篇」TTL与CMOS电平的区别(电平转换)-学习笔记

一、TTL电平与CMOS电平的定义常用的逻辑电平逻辑电平:有TTL、CMOS、LVTTL、ECL、PECL、GTL;RS232、RS422、LVDS等。其中TTL和CMOS的逻辑电平按典型电压可分为四类:5V系列(5VTTL和5VCMOS)、3.3V系列,2.5V系列和1.8V系列。5VTTL和5VCMOS逻辑电平是通用的逻辑电平。3.3V及以下的逻辑电平被称为低电压逻辑电平,常用的为LVTTL电平。低电压的逻辑电平还有2.5V和1.8V两种。ECL/PECL和LVDS是差分输入输出。RS-422/485和RS-232是串口的接口标准,RS-422/485是差分输入输出,RS-232是单端输入

iOS开发之OC和swift互相调用

一、OC调用swift文件这里创建一个名为Test的OC项目在OC项目中创建一个swift文件Person.swift,会提示是否创建桥接文件。这个桥接文件是用于swift调用OC的,可以创建,若不创建则后续手动创建也是可以的。编译器会为我们自动创建一个隐藏的Test-swift.h文件。1、只要在OC文件里引入这个文件就可以使用swift文件。2、这个文件名称默认是:ProductModuleName-Swift.h。3、如果不希望使用默认名称,也可以自定义,在BuildSettings中找到Object-CGeneratedinterfaceHeaderName,这里可以自定义用于引入的s

OC中的链式编程

今天看到项目里边有一段代码[BAFRequestrequest].setBaseURL(host).setPath(path).setRequestSerializerType(RequestHTTP).setRequestType(BAFRequestTypeAPI).setMethod(MethodType).setParams(finalParams)-(BAFRequest*(^)(NSString*baseURL))setBaseURL;第一眼看上去感觉有点蒙,返回的是一个block,为什么可以直接去请求下一个方法呢?其实细心地朋友已经发现了,Masonry的布局使用的就是这种编程方

OC 底层(KVC、KVO、Delegate、Category、Extension、通知)

目录1.KVC2.KVO3.通知4.代理、委托、协议5.Block、KVO、通知、代理之间的区别6.分类Category和类扩展Extension7.类方法、实例方法、构造方法1.KVC概念:KVC(Key-ValueCoding)键值编码,是一种可以直接通过字符串类型的属性名key来访问或赋值某个类属性的机制,而不是通过调用Setter、Getter方法访问。这样就可以在运行时动态地访问和修改对象的属性,而不是在编译时确定,这也是iOS开发中的黑魔法之一。它是利用NSKeyValueCoding非正式协议实现的一种机制,对象采用这种机制来提供对其属性的间接访问。说明:1.写下KVC代码并点击

从零学习Swift 15: 从OC到Swift过渡

总结作为一个iOS开发者,如何从OC过渡到Swift.今天我们就来讲解一下从OC开发转到Swift开发的注意点.一:条件编译有时候我们要限制我们的代码在某些平台,某种架构,某一个语言版本下运行,这时候就用到了条件编译.swift中的条件编译和OC中的一样:#ifos(macOS)||os(iOS)print("在macOS或者iOS平台下执行")#elseifarch(x86_64)||arch(arm64)print("x86或者arm64架构下执行")#elseifswift(>=5.0)print("swift版本要大于等于5.0")#elseiftargetEnvironment(si

串口、COM口、UART口, TTL、RS-232、RS-485区别详解

目录一、什么是串口、COM口、UART口,TTL、RS-232、RS-485摘要:1、串口、COM口解释:2、实物照片及解释二、TTL、RS-232、RS-485的电平形式1、TTL介绍2、RS232介绍正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消3、RS485介绍三、串口补充解释各种常用芯片RS-232与RS-485的区别接口的物理结构方面:接口电气方面:通讯线的区别:传输数据的最大波特率:单工、半双工和全双工的区别:一、概述        1、串口=COM口(clustercommunicationport,串行通讯端口),是指的物理接口形式(硬件)。而TTL、RS-

【单片机】UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB、SD卡、1-WIRE、Ethernet等常见通信方式

在单片机开发中,UART、I2C、RS485等普遍在用,这里做一个简单的介绍UART通用异步收发器UART口指的是一种物理接口形式(硬件)。UART是异步(指不使用时钟同步,依靠帧长进行判断),全双工(收发可以同时进行)串口总线。它比同步串口复杂很多。有两根线,一根TXD用于发送,一根RXD用于接收。UART的串行数据传输不需要使用时钟信号来同步传输,而是依赖于发送设备和接收设备之间预定义的配置,对于发送设备和接收设备来说,两者的串行通信配置应该设置为完全相同。起始位:表示数据传输的开始,电平逻辑为“0”。数据位:可能值有5、6、7、8、9,表示传输这几个bit位数据。一般取值为8,因为一个A

51驱动NRF24L01通信,NRF24L01与TTL转NRF24L01模块通信

51驱动NRF24L01通信,NRF24L01与TTL转NRF24L01模块通信NRF24L01一、简介二、引脚功能描述程序设计一、对24L01的程序编程的基本思路如下:二、Tx与Rx的配置过程1、Tx模式初始化过程:2、Rx模式初始化过程:三、基本程序函数通信测试一、两个51单片机控制NRF24L01互相通信一、51单片机控制NRF24L01与NRF24L01转TTL串口模块通信总结NRF24L01一、简介NRF24L01是NORDIC公司最近生产的一款无线通信通信芯片,采用FSK调制,内部集成NORDIC自己的EnhancedShortBurst协议。可以实现点对点或是1对6的无线通信。无