在学习Dart语言的过程中,发现很多语法点和Swift有异曲同工之妙,所以就顺便记录下,已便更好的理解掌握。
打印、注释、分号打印Dart和Swift都用print函数,输出内容到console面板上。
注释相同点:单行注释: 以//开始,所有在//和改行结尾之间的内容被编译器忽略。多行注释: 以/*开始,以*/结尾,所有在/*和*/之间的内容被编译器忽略,注意多行注释可以嵌套。文档注释: 以///或者/**开始。在调用时候,有提示信息。
不同点:Dart中的文档注释,除非用中括号括起来,否则Dart编译器会忽略所有文本。使用中括号可以引用类、方法、字段、顶级变量、函数、和参数。括号中的...
消息机制Objective-C是运行时语言,消息机制是运行时机制中一个重要的组成部分。方法调用的本质就是发送消息。
实现方式定义一个Person类,如下所示。
12345678910111213141516171819202122232425262728@interface Person : NSObject@property (nonatomic, assign)NSUInteger age;- (NSString *)sayHello;- (NSString *)howOldAreYou:(NSString *)name;+ (NSString *)howOldAreYou:(NSS...
动态获取类对象信息使用Objective-C语言提供的与runtime相关的函数,动态的获取类的所有信息包括成员变量、函数列表和协议列表等,如下所示。
先定义一个继承自NSObject的类CTMObject。
12345678910111213141516171819202122232425262728293031323334#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@protocol CTMObjectDelegate1 <NSObject>@end@protocol CTMObjectDel...
isa指针Objective-C是一门面向对象的编程语言,每一个对象都是一个类的实例。在Objective-C语言的内部,每一个对象都有一个名为isa的指针,指向该对象所属的类。每一个类描述了一系列它的实例的特点,包括成员变量列表、成员函数列表等。每一个对象都可以接受消息,而对象能够接受的消息列表保存在它所对应的类中。
在Xcode中,打开NSObject的定义头文件,可以看到,NSObject就是一个包含isa指针的结构体,如下所示。
1234567// NSObject.h@interface NSObject <NSObject> {#pragma clang...
RunLoop是iOS开发中非常基础的一个概念,这篇文章将从CFRunLoop的源码入手,介绍RunLoop的概念以及底层实现原理。之后会介绍一下在iOS中,苹果是如何利用RunLoop实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。
RunLoop的概念一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线程能随时处理事件但并不退出,通常的代码逻辑是这样的:
1234567function loop() { initialize(); do { var message = get_next_mess...
NSTimerNSTimer是iOS开发当中最常用的定时器。其底层是通过Runloop来实现的,大部分情况下比较准确。但是当前循环耗时操作较多时,会出现延迟问题。同时,也受所加入的RunLoop的Mode影响。
创建之后手动添加到哪个线程的RunLoop中,就运行在哪个线程。
1234567+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;+...
很多刚入门的iOS开发者经过一段时间学习,可以熟练的调用各种API。这时候写一个tableView、实现一个小动画、独立完成一个交互的功能已经不在话下,但同时iOS开发者也就到了技术上的第一个瓶颈——即拥有独立开发一个功能的水平,却似乎并未达到独立开发一个App的水准;看似什么都会做、什么都能做,却总是不能在第一时间想到最佳方案。功能是完成了,然而效率上不是很高,代码逻辑在日后也可能需要返工重构。
我个人认为,突破这个瓶颈的捷径就是掌握设计模式。设计模式是前人总结的、面对开发中常见问题的解决方案——它们行之有效、便于理解、适合举一反三。简单点说,设计模式就是开发中的套路和模板。熟练掌握设...
UIScrollViewUIScrollView继承自UIView,它的作用是通过滑动来扩展边界。
分析我们知道UIView的bounds属性的作用是以自身为参考坐标系,来描述自己的大小和位置。如下如所示:
通过上图可知,修改控件自身bounds属性的origin值,内部的子控件的位置就会发生相应的变化。
因为UIScrollView继承自UIView,所以它是利用了bounds属性的特点,来实现滑动的特性的。
实现原理通过模拟系统UIScrollView,实现自定义的CustomScrollView控件,来了解UIScrollView的底层实现原理。
1234567891011121...
HTTP超文本传输协议用于客户与服务器端之间的通信。
告知服务器客户端意图的HTTP方法,包括以下几种:
① GET:直接访问URI识别的资源,也就是说根据URI来获取资源。
② POST: 用来传输实体的主体。
③ PUT:用来传输文件。
④ HEAD:用来获取报文首部,和GET方法差不多,只是响应部分不会返回主体内容。
⑤ DELETE:删除文件,和PUT恰恰相反。按照请求的URI来删除指定位置的资源。
⑥ OPTIONS:询问支持的方法,用来查询针对请求URI指定的资源支持的方法。
⑦ TRACE:追踪路径,返回服务器端之前的请求通信环信息。
⑧ CONNECT:要求用隧道协议连...
框架结构NSURLSession
123AFURLSessionManagerAFHTTPSessionManager (使用入口,父类是AFURLSessionManager)
Serialization
12345678910111213141516171819202122232425<AFURLRequestSerialization> AFHTTPRequestSerializer AFJSONRequestSerializer (父类是AFHTTPRequestSerializer) AFPropertyListRequestSerializer (父类...