CaveOps: Night-City
#Hello Edgerunners, welcome to the Night-City.

Welcome!

iOS 入门 018: XML 浅析

XML 可扩展标记语言 区分大小写 命名不能以xml(XML、Xml...)、数字、下划线开头,不能出现冒号 <?xml version="1.0" standalone="no" encoding="UTF-8"?> W3C认证,IBM & Microsoft联合推广 能够解决所有异构数据库系统之间的数据传递 DTD 验证XML元素是否符合规范 <!DOCTYPE myfile = [<!ELEMENT name (#PCDATA)>]> 元素 <name>Bill</name> 属...

iOS 入门 017: 多线程

多线程 进程 * 进程对应一块内存空间 线程 * 一个进程可以分为多个线程,一个iOS程序运行后,默认会开启一条线程,称为主线程或UI线程 * 网络开发一般使用多线程 时间片 * 人的感知时有延迟的,CPU将时间分为人无法感知的碎片,称为时间片 串行与并行 * 线程是串行的,通过时间片实现伪并行   * 线程调度时无序的,线程启动后的调度顺序是由CPU决定的,程序员无法参与 线程的缺点 * 开启线程需要占用一定的内存空间,在iOS中,主线程栈区占用1MB,子线程占用512K * 线程太多,会占用大量的内存空间,降低程序性能,CPU在调度线程上的开销越大,负荷越大 线程的主要作用 * 显示和刷...

iOS 入门 016: 单例模式及其实现

单例模式及其实现 步骤 提供全局访问方法,公认的格式 shared+类型 有一个静态全局变量,保证对象的实例保存在静态区,并且不需要关心释放 的问题 重写allocWithZone方法,能够保证对象只被实例化一次! 需要包含dispatch_once:保证对象只被分配一次内存空间 实现shared方法 需要包含dispatch_once:保证对象只被初始化一次 eg.h #import <Foundation/Foundation.h> @interface SoundTools : NSObject <NSCopying> /...

iOS 入门 015: copy 与 mutableCopy

copy 与 mutableCopy 普通对象的拷贝 copy的目的是在修改原始版本和副本的时候,彼此各不干扰 copy拷贝为不可变对象 mutableCopy拷贝为可变对象 源对象 方式 操作 类型 不可变 copy 引用计数+1 浅拷贝,指针拷贝 mutableCopy 新建副本 深拷贝,对象拷贝 可变 copy mutableCopy @property (nonatomic, copy) NSString *str; 给copy属性设置数值时,默认会做一次copy操作,拷贝出不可变的版本 目标值是可变的,会建立一个不可变的副本 ...

iOS 入门 014: Block

block 定义 inlineBlock return_value ^(block_name)(arg_list) = return_value ^(arg_list){ code_block; } typedef Block block是一种数据类型,可以定义类型,当作返回值 typedefBlock.m #import <Foundation/Foundation.h> typedef void^(myBlock)(); myBlock myDemo(){ myBlock mb = ^{ NSLog(@"test"...

iOS 入门 013: AutoLayout 与 SizeClass

自动布局 建议 多用Storyboard练习自动布局 技巧 在界面上摆放好控件的位置 使用自动布局添加"约束" (蓝色的线) Size Classes Compact:压缩的 Reguler:常规的 约束 注意 一旦设置了约束,可以通过修改约束数值,调整控件位置,不要再调整frame 参考 任何一个控件都可以参照另外控件准确定义出位置frame(x, y, width, height) 注意 使用了自动布局,就"不要"再用代码改frame,因为已经将所有的布局交给了自动布局系统! 其他 pin 是指定大小和位置 al...

iOS 入门 012: transform

transform 形变属性 控件的形变属性 (可以设置旋转角度、比例缩放、平移等属性) UIView一次只能应用一个形变属性 设置transfrom会改变UIView的frame属性,但不会改变bounds属性 CGAffineTransformMakeScale相对UIView的初始状态进行形变 CGAffineTransformScale相对UIView的当前状态进行形变 Rotate 旋转: CGAffineTransformMakeRotation(CGFloat sx, CGFloat sy) CGAffineTransformRotate(CGA...

iOS 入门 011: frame、bounds 与 center

frame/bounds/center frame 位置与尺寸属性 控件所在矩形框的位置和尺寸 坐标系原点为父视图的左上角,向右横轴递增,向下纵轴值递增 bounds尺寸属性 控件所在矩形框的位置和尺寸 bounds的坐标系原点为自身的左上角,向右横轴递增,向下纵轴值递增 center中心点属性 控件中点的位置,通过center属性设置视图位置更加方便 center的坐标系原点为父视图的左上角,向右横轴递增,向下纵轴值递增 使用注意 用frame和center可以修改UIView的位置 用frame和bounds可以修改UIView的尺寸 通常,...

iOS 入门 010: Xib

Xib 从文件中读取需要的组件 NSArray *bundelArr = [[NSBundle mainBundle]loadNibNamed:@"myCell" owner:nil options:nil]; cell = bundelArr[0] nib其实是一个xib,里面是数组保存了各个组件。 注册nib文件,并且给表格注册可重用的nib 这样做的好处是能简化cell优化的过程,这样在初始化cell的时候就不用判断是否为nil e.g. - (void)viewDidLoad { [super viewDidLoad]; UINib *n...

iOS 入门 009: autoreleasepool自动释放池

autoreleasepool自动释放池 问答 自动释放池的作用是什么? 延迟释放 那些对象会延迟释放? 所有用类方法实例化的对象都是延迟释放的 对象何时被销毁? 所有延迟释放的对象在超出作用域之后会被添加到最新创建的自动释放池中,但是不会被立即销毁,当自动释放池被销毁时,会向池中所有对象发送release消息,释放所有延迟释放的对象 自动释放池何时被销毁? 示意图 iPhone Application Launches > iPhone Touch Event > Cocoa Touch Creates Event > Event Object ...

iOS 入门 008: RunLoop运行循环

RunLoop运行循环 作用与特性 保证程序不退出 监听所有事件,手势触摸、时钟触发、网络加载数据完成 没有事件时回休眠(省电),一旦监听到事件会会响应 程序启动后会创建RunLoop,每一个线程都有一个RunLoop,但只有主线程的RunLoop会启动 例子 按钮点击事件是如何响应的? addTarget只是注册(给RunLoop)点击按钮后执行控制器的click方法 Application ⬇️ runloop ⬇️ Window ⬇️ ViewController ⬇️ View ⬇️ Button ⬇️ ...

iOS 入门 007: iOS系统框架表

框架名称 功能 Foundation 提供OC的基础(像NSObject)、基本数据类型等 UIKit 创建和管理应用程序的用户界面 QuartzCore 提供动画特效以及通过硬件进行渲染的能力 CoreGraphics 提供2D绘制的基于C的API SystemConfiguration 检测当前网络是否可用和硬件设备状态 AVFoundation 提供音频录制和回放的底层API,同时负责管理音频硬件 CFNetwork 访问和配置网络,像HTTP、FTP和Bonjour Services CoreFoundation 提供抽象的常用数据类型,如Unico...

What's this?

The Night-City version of CaveOps inspired by Cyberpunk 2077. Not finished yet.

Pinned Message

The Founder and CEO of Infeca Technology.

Developer, Designer, Blogger.

Big fan of Apple, Love of colour.

Feel free to contact me.

反曲点科技创始人和首席执行官。

开发、设计与写作皆为所长。

热爱苹果、钟情色彩。

随时恭候 垂询