block

循环引用

£可爱£侵袭症+ 提交于 2020-03-12 07:40:33
ARC已经出来很久了,自动释放内存的确很方便,但是并非绝对安全绝对不会产生内存泄露。导致iOS对象无法按预期释放的一个无形杀手是——循环引用。循环引用可以简单理解为A引用了B,而B又引用了A,双方都同时保持对方的一个引用,导致任何时候引用计数都不为0,始终无法释放。若当前对象是一个ViewController,则在dismiss或者pop之后其dealloc无法被调用,在频繁的push或者present之后内存暴增,然后APP就duang地挂了。下面列举我们变成中比较容易碰到的三种循环引用的情形。 (1)计时器NSTimer 一方面,NSTimer经常会被作为某个类的成员变量,而NSTimer初始化时要指定self为target,容易造成循环引用。 另一方面,若timer一直处于validate的状态,则其引用计数将始终大于0。先看一段NSTimer使用的例子(ARC模式): 1 #import <Foundation/Foundation.h> 2 @interface Friend : NSObject 3 - (void)cleanTimer; 4 @end 1 #import "Friend.h" 2 @interface Friend () 3 { 4 NSTimer *_timer; 5 } 6 @end 7 8 @implementation Friend 9 -

Linux Kernel - The Block I/O Layer

北慕城南 提交于 2020-03-11 17:56:49
固定大小的数据块称为块,常见块设备磁盘有硬盘,闪存等,随机访问,字符设备以序列数据流的方式访问,如键盘输入是一字节接一字节访问。由于块设备的复杂度,访问性能等原因,内核提供了一个子系统进行管理,即 Block I/O Layer。块设备最小可寻址单元称为扇区,扇区大小是一个设备的物理属性,大部分块设备为 512 B,CD-ROM 磁盘为 2KB。软件层面上的块是文件系统中的一个抽象概念,也是文件系统最小可逻辑寻址单元。尽管物理设备是以扇区来寻址,内核以块来执行磁盘操作。 且 Buffers and Buffer Heads struct buffer_head { unsigned long b_state; /* buffer state flags */ struct buffer_head *b_this_page; /* list of page’s buffers */ struct page *b_page; /* associated page */ sector_t b_blocknr; /* starting block number */ size_t b_size; /* size of mapping */ char *b_data; /* pointer to data within the page */ struct block_device *b

wma的文件位流结构篇1

烂漫一生 提交于 2020-03-11 03:19:42
1.wma文件是由asf封装的位流数据。 2一个asf容器,包含了 一个asf标志头,文件头指示了包的大小cbPacketSize,位流头。通过位流头,再确定是否为音频流头。如果是音频流的头,则可以进行格式判断。 3,可以读取audio_id,获取格式信息。 包括 采样率,比特率,block对齐长度, 4,一个包里面可以包含一个或者多个负载。这些负载可以来自不同的流信息。 在asf的头里面记录了packet的数据长度,本包的帧个数,帧大小。 5,packet的数据内容为帧,而一个帧可以分成多个 block的位流。 同一个block的数据,可以跨包存储。packet前面会记录有多少bit是属于上一个packet的。 解包流程: 解包头,获取数据---> 解帧头-->解帧(解block) 1、因为拆包的时候,包很可能不是按block的整数倍拆分的,所以包含上一包的数据。在帧头里面会有信息指出本包完整帧的起始位置。每一个的bit也可以不是byte对齐的,如第7点 2.本包解码的时候 本包的位流不一定耗尽,如果是非跨包存储的格式[flag2],需要丢弃。 3.每包的第一个完整block会重新reset_block_size 4.关系:文件组织的基本结构是cbPacketSize,它里面包含 n个segment的数据,如果是audio_seg的话,它的有效数据长度为nBlockAlign。

Kotlin系列 - 高阶函数与标准库中的常用函数(三)

社会主义新天地 提交于 2020-03-10 03:39:44
Kotlin细节文章笔记整理更新进度: Kotlin系列 - 基础类型结构细节小结(一) Kotlin系列 - 函数与类相关细节小结(二) 1.高阶函数 基本概念: 传入或者返回函数的函数 函数引用:引用的函数名前加上 :: 有以下几种类型: 类成员方法引用: 类名::成员方法名 扩展函数引用: 类名::扩展函数名 实例函数引用: 实例名::成员方法名 包级别函数引用: ::函数名 第一个例子: 打印数组中的元素(传入包级别函数) fun main(args:Array<String>) { args.forEach(::println) //函数引用 } public actual inline fun println(message: Any?) { System.out.println(message) } public inline fun <T> Array<out T>.forEach(action: (T) -> Unit): Unit { for (element in this) action(element) } forEach(action: (T) -> Unit) :要求传入了一个函数,参数为 (action: (T) -> Unit) ,类型为 一个参数T ,返回值为 Unit println(message: Any?) :类型为 一个参数T

Hadoop架构之1.0

孤街醉人 提交于 2020-03-09 16:10:59
Hadoop架构之1.0 本文主要讲述Hadoop中HDFS的架构,详细的MapReduce将放到后面写一篇专门的博客 文章目录 Hadoop架构之1.0 hadoop1.0架构 HDFS组件 HDFS存储过程 写入操作 读取过程 HDFS的不足 MapReduce架构 MapReduce组件 MapReduce数据处理过程 MapReduce不足 hadoop1.0架构 HDFS组件 NameNode 管理整个文件系统的目录树结构和元数据信息 保管文件与Block块序列之间的对应关系,以及Block块与DataNode节点之间对应关系 Block副本及其存储位置等管理数据 DataNode状态监控 两者通过段时间间隔的心跳来传递管理信息和数据信息,通过这种方式的信息传递,NameNode 可以获知每个 DataNode 保存的 Block 信息、DataNode 的健康状况、命令 DataNode 启动停止等(如果发现某个 DataNode 节点故障,NameNode 会将其负责的 block 在其他 DataNode 上进行备份) 负责接受用户的操作请求 元数据管理操作: **fsimage:**内存命名空间元数据在外存的镜像文件 **editlog:**各种元数据操作的write-ahead-log文件,在体现到内存数据变化前首先会将操作记入editlog中,以防数据丢失。

NetAnalyzer笔记 之 十一 打造自己的协议分析语言(1)初衷与语法构想

此生再无相见时 提交于 2020-03-08 22:19:48
回头看看NetAnalyzer开发系文档上次一篇竟然是2016年,老脸一红。不过这几年墨云成功过的讨到一个温柔贤淑的老婆,有了一个幸福的家庭,去年9月又有了一个大胖儿子,想想也就释然了^_^ 其实这几年NetAnalyzer的开发一直也没有中断过,上一篇的NetAnalyzer还是3.x系列的版本,现在最新的版本已经是 5.6.0.38 版本了,去年8月份更新的 NetAnalyzer官网地址: http://twzy.sinaapp.com/ 废话不多说了,回到今天的主题--打造自己的协议分析语言。 1. 初衷 《道德经》中有“道生一,一生二,二生三,三生万物”的说法,描述了万物从少到多,从简单到复杂的一个过程。在计算机中我们所面对的各种各样的文件,如:图片,文本,音乐甚至最基本的程序文件其实都是通过二进制数据也就是大量的0或1的方式存储在硬盘或内存中的。但是如何从0和1转换为我们熟知的各种媒体数据呢,这就需要根据0和1不同的排列顺来完成,这就是编码方案,而这种编码方案更通俗的来说就是一种协议,这种协议来约束不同的设备,不同的系统当遇到对应的数据是应该将其解析为什么文件。 当今网络作为与我们生活朝夕相关的事物,给我们带来了便利的生活体验,有些应用甚至可以做到计算机与智能手机之间的无缝切换,这就得益于网络中各个层次的协议完美对接。目前的互联网模型大部分都是基于经典的TCP/IP协议

iOS block详解

99封情书 提交于 2020-03-08 18:49:04
文章目录 概述 Block的定义与使用 实际开发中的定义 block与外界变量 截获自动变量(局部变量)值 默认情况 __block修饰的外部变量 Block的copy操作 Block的存储域及copy操作 __block变量与__forwarding 防止Block循环引用 Block的使用示例 Block作为变量(Xcode快捷键:inlineBlock) Block作为属性(Xcode快捷键:typedefBlock) 作为OC中的方法参数 block回调 概述 Block的定义与使用 //1.无参数,无返回值,声明和定义 void ( ^ MyBlockOne ) ( void ) = ^ ( void ) { NSLog ( @"无参数,无返回值" ) ; } ; MyBlockOne ( ) ; //block的调用 //2.有参数,无返回值,声明和定义 void ( ^ MyblockTwo ) ( int a ) = ^ ( int a ) { NSLog ( @"a=%d我就是block,有参数,无返回值" , a ) ; } ; MyblockTwo ( 100 ) ; //3.有参数,有返回值 int ( ^ MyBlockThree ) ( int , int ) = ^ ( int a , int b ) { NSLog ( @"%d我就是block

art-template模板继承

笑着哭i 提交于 2020-03-08 18:37:53
art-template模板继承 include block extent footer.html < div > < h1 > 公共的底部 < / h1 > < / div > layout.html < ! DOCTYPE html > < html lang = "en" > < head > < meta charset = "UTF-8" > < title > Document < / title > < link rel = "stylesheet" href = "/node_modules/bootstrap/dist/css/bootstrap.css" > { { block 'head' } } { { / block } } < / head > < body > { { include './header.html' } } { { block 'content' } } < h1 > 默认内容 < / h1 > { { / block } } { { include './footer.html' } } < script src = "/node_modules/jquery/dist/jquery.js" > < / script > < script src = "/node_modules/bootstrap/dist/js/bootstrap

Hadoop原理笔记

纵然是瞬间 提交于 2020-03-08 09:54:49
1:Hadoop家族 2:Hadoop的两大核心 3:HDFS介绍 4:HDFS结构 5:HDFS架构图 6:HDFS的数据存储单元(Block) 7:HDFS设计思想 8:NameNode(NN)介绍 9:Secondary NameNode(SNN) SNN合并流程 10:DataNode(DN) Block副本放置策略 11:HDFS读流程 客户端并行从各个Block中读取。 12:HDFS写流程 客户端只写第一个副本,其他副本由DataNode之间复制。 13:HDFS文件权限 来源: CSDN 作者: 天地北斗七星 链接: https://blog.csdn.net/weixin_45000314/article/details/104727018

Objective-c快速入门

风流意气都作罢 提交于 2020-03-08 04:21:51
对象(Class)的声明和定义 和其他的语言不同,OC的对象创建分为两个部分。声明部分(@interface)和实现部分(@implementation),且它们都必须使用@end结束。 对象的声明(OC中基本上所有的对象都继承自NSObject): @interface Car : NSObject { int _wheels; NSString *_color; } - (void)run; + (void)playMusic; @end 对象的实现: @implementation Car -(void)run { NSLog(@"The %@ car that has %d wheels is running...", _color, _wheels); } + (void)playMusic { NSLog(@"music palying..."); } @end @interface代码块的作用: 成员变量的声明和方法的声明。成员变量必须在花括号中声明。而方法则在花括号和@end之间声明 默认情况下成员变量的可访问性为protected。 @implementation代码块的作用: 用于方法的定义(实现)。以减号开头的方法属于实例方法,以加号开头的方法属于类方法。 @implementation部分同样可以声明成员变量,但是由于在多文件编译中.m文件不能被import