十四章--icloud技术--之一
来源:互联网 发布:儿童编程机构加盟 编辑:程序博客网 时间:2024/05/03 05:10
到这一章就遇到困难了,用书上的代码运行不起来。先解释里面的一些基础代码,涉及到指针操作,c语言的基础还是不牢啊,咨询了我们这的一个大牛才看懂。
- (BOOL)stateAtRow:(NSUInteger)row column:(NSUInteger)column {
const char *bitmapBytes = [self.bitmap bytes];
char rowByte = bitmapBytes[row];
char result = (1 << column) & rowByte;
if (result != 0)
return YES;
else
return NO;
}
解释一下:bitmapBytes里面存的是0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80,这是初始状态,每一个字节表示每一行的列的状态,比如第一行是0x01,那么就是说第一行第一列是置为1,0x02表示第二行第二列被置为1,以此类推,形成的初始图就是
char result = (1 << column) & rowByte 这句话的意思是1左移column位再和rowByte进行与操作。
比较不好理解的是下面的操作
- (void)setState:(BOOL)state atRow:(NSUInteger)row column:(NSUInteger)column {
char *bitmapBytes = [self.bitmap mutableBytes];
char *rowByte = &bitmapBytes[row];
if (state)
*rowByte = *rowByte | (1 << column);
else
*rowByte = *rowByte & ~(1 << column);
}
这个方法是用来设置像素点是否为选中,这里面用指针进行移位操作,普及一下,*rowByte不是地址,是里面存放的字节(例如初始的0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80)
*rowByte = *rowByte | (1 << column) 这个就是说1往左column位移然后和rowByte里的第一个字节0x01进行或操作,例如我们点了第一行的第8列(从右往左是1到8),操作 过后就是0x81、0x02、0x04、0x08、0x10、0x20、0x40、0x80,如下图
- 十四章--icloud技术--之一
- 十四章--icloud技术--之二
- 十四章--iCloud--之三
- 十四章--icloud之四
- 十四章--icloud(终结)
- iCloud
- iCloud
- iCloud
- iCloud
- iCloud对开发者的作用(iOS5新特性学习之一)
- iCloud对开发者的作用(iOS5新特性学习之一)
- iCloud对开发者的作用(iOS5新特性学习之一)
- CSS学习(十四)-CSS颜色之一
- 十四章
- 十四章
- iOS开发系列之一--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总
- 搜索引擎技术:排序技术之一
- JACOB技术探讨之一
- 图
- [LeetCode] Next Permutation
- 数据库学习笔记
- udp协议的数据接收与发送的代码
- SEO防止过度优化的三个步骤
- 十四章--icloud技术--之一
- 计算机网络学习笔记1
- 题目1109:连通图
- 财务分析报告
- 基本sql修改表操作
- Oracle 表被其他的 对象 引用
- 海量数据相似度计算之simhash和海明距离
- 计算机网络学习笔记2
- linux防火墙设置