1 Certificates, Identifiers & Profiles 定义和相互之间的关系
Certificates 证书 :
包含两种
[1] 开发证书 Development Certificates
主要是授权mac设备的开发权限
[2] 发布证书 Distribution Certificates
主要是授权mac设置发布权限
Identifiers 标识符
创建应用的id,和 Pass Type IDs
Devices
创建测试设备
iOS Provisioning Profiles
ios 配置文件包含两种 开发配置文件 和发布配置文件
配置文件中包含了 证书,appid,测试设备,配置文件
2 创建Certificates, Identifiers & Profiles
2.1 创建Certificates
创建过程:
选择授权类型:开发还是发布--->在mac设备中创建密钥并提交---> 下载证书,并安装
2.2 创建app id
创建过程:
主要包含两个信息:appid 描述信息 appid域名
如:appid 描述信息 test
appid 域名信息 com.youxue.test
2.3 创建测试设备id
创建过程:
填写 设备名称,UDID ,并提交
补充:UDID获得方法: 将设备连接到电脑上,用Itunes打开,查看设备并获得udid
2.4 Provisioning Profiles
创建过程:
选择 类型,配置 设备id,appid 生成配置文件,并下载安装
按位移运算符
一、右移表达式的位,保持符号不变。
expression1 >> expression2
参数
expression1
任何数值表达式。
expression2
任何数值表达式。
备注
>> 运算符将 expression1 的所有位右移expression2 指定的位数。用expression1 的符号位填充右移后左边空出来的位。右移的位被丢弃。expression1 的数据类型决定此运算符所返回的数据类型。·
>> 运算符屏蔽 expression2 以免expression1 的移位量太大。否则,如果移位量超出 expression1 的数据类型中的位数,则可能移走所有的初始位,从而会提供无意义的结果。为了确保每次移位保留至少一个初始位,移位运算符将使用以下公式来计算实际移位量:使用 expression1 中的位数减一所得的结果来屏蔽 expression2(使用按位“与”运算符)。
示例
计算完下列代码后,temp 的值为 -4:因为 -14(即二进制的11110010)右移两位后等于 -4(即二进制的11111100)。
var temp
temp = -14 >> 2
二、左移表达式的位
expression1 << expression2
参数
expression1
任何数值表达式。
expression2
任何数值表达式。
备注
<< 运算符将expression1 的所有位左移expression2 指定的位数。expression1的数据类型决定此运算符所返回的数据类型。
<< 运算符屏蔽expression2 以免expression1 的移位量太大。否则,如果移位量超出expression1 的数据类型中的位数,则可能移走所有的初始位,从而会提供无意义的结果。为了确保每次移位保留至少一个初始位,移位运算符将使用以下公式来计算实际移位量:使用expression1 中的位数减一所得的结果来屏蔽expression2(使用按位“与”运算符)。
示例
var temp
temp = 14 << 2
变量 temp的值为 56,因为 14(即二进制的00001110)左移两位等于 56(即二进制的 00111000)。
三、按位“与”运算符(&)
对两个表达式执行按位“与”运算。
expression1& expression2
参数
expression1
任何数值表达式。
expression2
任何数值表达式。
备注
& 运算符将参数强制为匹配的数据类型。&运算符查看两个表达式的二进制表示形式的值,并对它们执行按位“与”运算。参数的数据类型决定此运算符所返回的数据类型。
示例:
0101 (expression1)
1100 (expression2)
----
0100 (result)
任何时候,只要两个表达式的某位都为 1,则结果中的该位为 1。否则,结果中的该位为 0。
四、取模运算符 (%)
一个表达式的值除以另一个表达式的值,并返回余数。
number1 % number2
参数
number1
任何数值表达式。
number2
任何数值表达式。
备注
取模或余数运算符用number2 除 number1 并只返回余数。结果中的符号与 number1 的符号相同。结果值在 0 和 number2 的绝对值之间。
取模运算符的参数可以为浮点数字,因此 5.6% 0.5 返回 0.1。
在网上找到ListView 和ScroolView 共存的方法无非是给他每个listview 重新增加高度,但是android 的设计者始终认为这并不是一种好的实现方法。但是有的时候有必须要用这种蛋疼的设计。
于是乎,我网上找到了一个方法:
public class Utility { public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); } }
但是我每次调用的时候都会产生在listItem.measure(0,0)报空指针异常。我debug 发现listItem 并不是为空啊,为啥会报错。在经过一番查找之后。我发现原来是自己item的布局用了RelativeLayout 把他换为LinearLayout 就好了。究其原因,原来是 Linearlayout重写了onmeasure方法,其他的布局文件没有重写onmeasure,所以在调用listItem.measure(0, 0); 会报空指针异常,如果想用这个东东,就必须用linearlayout布局喽。