在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0. 2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“ 回车” (carriage<四轮马车> return,告诉打字机把打印头定位在左边界;另一个叫做“换行”(line feed),告诉打字机把纸向下移一行。 这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为 在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。 Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回车>” ,即“\n\r”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Win dows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的 结尾可能会多出一个^M符号。
【翻译】(45)action元素
see
http://developer.android.com/guide/topics/manifest/action-element.html
原文见
http://developer.android.com/guide/topics/manifest/action-element.html
-------------------------------
<action>
action元素
-------------------------------
* syntax:
* 语法:
-------------------------------
<action android:name="string" />
-------------------------------
* contained in:
* 包含在:
<intent-filter>
* description:
* 描述:
Adds an action to an intent filter. An <intent-filter> element must contain one or more <action> elements. If it doesn't contain any, no Intent objects will get through the filter. See Intents and Intent Filters for details on intent filters and the role of action specifications within a filter.
添加一个动作到一个意图过滤器。一个<intent-filter>元素必须包含一个或多个<action>元素。如果它不包含任何元素,那么没有Intent对象将通过过滤器。参见意图与意图过滤器以获取关于意图过滤器和在一个过滤器中动作规范的作用的细节。
* attributes:
* 属性:
* android:name
The name of the action. Some standard actions are defined in the Intent class as ACTION_string constants. To assign one of these actions to this attribute, prepend "android.intent.action." to the string that follows ACTION_. For example, for ACTION_MAIN, use "android.intent.action.MAIN" and for ACTION_WEB_SEARCH, use "android.intent.action.WEB_SEARCH".
动作名称。一些标准动作被定义在Intent类中作为ACTION_string常量。为了赋予这些动作中的一个到这个属性,前加上"android.intent.action."到ACTION_后面的字符串。例如,对于ACTION_MAIN,使用"android.intent.action.MAIN",而对于ACTION_WEB_SEARCH,使用"android.intent.action.WEB_SEARCH"。
For actions you define, it's best to use the package name as a prefix to ensure uniqueness. For example, a TRANSMOGRIFY action might be specified as follows:
对于你定义的动作,最好使用包名作为前缀以确保唯一性。例如,一个TRANSMOGRIFY动作(注:英文意思是“变形”)可能被指定如下:
-------------------------------
<action android:name="com.example.project.TRANSMOGRIFY" />
-------------------------------
* introduced in:
* 引入:
API Level 1
API级别1
* see also:
* 另见:
<intent-filter>
Except as noted, this content is licensed under Apache 2.0. For details and restrictions, see the Content License.
除特别说明外,本文在Apache 2.0下许可。细节和限制请参考内容许可证。
Android 4.0 r1 - 27 Jan 2012 1:49
-------------------------------
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
(此页部分内容基于Android开源项目,以及使用根据创作公共2.5来源许可证描述的条款进行修改)
(本人翻译质量欠佳,请以官方最新内容为准,或者参考其它翻译版本:
* ソフトウェア技術ドキュメントを勝手に翻訳
http://www.techdoctranslator.com/android
* Ley's Blog
http://leybreeze.com/blog/
* 农民伯伯
http://www.cnblogs.com/over140/
* Android中文翻译组
http://androidbox.sinaapp.com/
)
内存管理:
1、一个对象的所有者可能不止一个。
2、你拥有通过alloc、new或copy(通过名字以“alloc”或“new”开头或名字中包含“copy”的方法)的对象的所有权。
3、如果向一个对象发送了一条retain消息,则获得该对象的所有权。
4、需要向使用release或autorelease释放对象的所有权。
共享对象的有效性:
cocoa的所有权策略规定,被接受的对象通常在整个调用方法的作用域内保持有效。但有如下例外
1、若对象属于某集合,但该对象在集合中被删除。
obj = [array objectAtIndex:n]; [array removeObjectAtIndex:n]; // 此时obj是无效的
当对象从一个基本的集合中删除时,会向该对象发送一条release消息。如果集合是该对象的唯一所有者,则释放该对象。
2、当“父对象”被收回的时候
obj = [parent child]; [parent release]; // 此时obj是无效的
通常情况下,类内的属性都会在该类的dealloc方法中release掉,所以如果parent是obj的唯一所有者,parent在release的时候会释放掉obj的内存空间。
解决方法,在获取对象的时候调用retain方法即可:
obj = [[array objectAtIndex:n] retain];
Web视图:
1、如果需要结合客户端与webview进行开发,需要在html中加入以下meta,告诉safari整个页面的宽度(单位:像素)
<meta name="viewport" content="width=320"/>
其他:
1、把精力放在用户能够看得见的地方
2、多使用property,少声明成员变量
3、使用()作为Category,而不是(Private)的Category
4、dealloc写在@synthesize后面,可以较明显的一一对应
5、
错误:
[foo release]; foo = [newVal retain];
正确:
if (foo != newVal) { [foo release]; foo = [newVal retain]; }
简洁:
[foo autorelease]; foo = [newVal retain];
6、不要在viewDidLoad中初始化数据。viewDidLoad可能会被调用多次,而viewDidUnload可能不会被调用一次
7、NSNotificationCenter中注册多个通知后,要逐一remove掉,如果直接使用[[NSNotificationCenter defaultCenter] removeObserver:self]remove的话,可能会remove掉父类注册的通知,就算父类是UIViewController,也会remove掉父类的Memory Warning通知。
PS:学习笔记,遇到值得记录的东西,记录之