Long Luo's Life Notes

每一天都是奇迹

By Long Luo

2014年的06月01日,去参观了2014年深圳·香港·澳门国际车展,算是第一次参加车展吧,按照惯例谈谈感(tu)想(cao)吧:

一、学到的东西:

English:

车展:Auto Show or Motor Show
手动挡:MT(Manual Transmission)
自动挡:AT(Automatic Transmission)
手自一体:AMT(Automated Mechanical Transmission)
档位:P(Parking) R(Reverse) N(Neutral) D(Drive)

Car Brand:

A

奥迪-Audi 
阿斯顿马丁-Aston Martin   

B

宝马-BMW   
宾利-Bentley   
别克-Buick  
       

C 

凯迪拉克-Cadillac   
雪铁龙-Citroen   
雪佛兰-Chevrolet   

F 

法拉利-Ferrari   
菲亚特-Fiat   
福特-Ford 

H 

本田-Honda   
现代-Hyundai   

J 

捷豹(美洲虎)-Jaguar

K 

起亚-Kia   

L 

路虎(陆虎)-Land Rover   
雷克萨斯-Lexus   
蓝伯基尼-Lamborghini  

M

马自达-Mazda 
梅赛德斯-奔驰-Mercedes-Benz   
玛莎拉蒂-Maserati 
迷你-Mini  

N

日产--Nissan  

P

标致-Peugeot   
保时捷-Porsche   

R

劳斯莱斯-Rolls-royce   

  S 

双龙-Ssangyong   
斯柯达-Skoda   
斯巴鲁-Subaru   
铃木-Suzuki     
精灵-Smart 
阅读全文 »

翻译 By Long Luo

原文链接:iOS Programming Basic: How Does the Hello World App Work?

译者注:
1. 由于这是技术文章,所以有些词句使用原文,表达更准确。
2. 由于水平有效,有些地方可能翻译的不够准确,如有不当之处,敬请批评指正.

我希望你享受了第一个iOS编程教程,同时已经创造了你的第一个App。在进入下一教程以及制作一个更复杂的App之前,我们有必要回过头,分析这个Hello World App。对于你理解一些Objective-C语言的语法和App的内部工作机制有很大帮助。

目前为止,想必你已经按照教程完成了你的第一个Hello World App。不过,当你完成了这个教程之后,你脑海里肯定冒出了更多疑问:

  • xib,.h,.m文件是做什么用的?
  • showMessage内部的代码是什么?用什么作用?
  • 当你按下Hello World的按钮发生了什么呢?按钮是如何触发了显示消息的动作呢?
  • Xcode中的Run按钮是如何运作的?

我希望你已经对Xcode IDE开发环境比较熟悉了,这样我就不用再解释一遍上面的内容了。对于每个开发者来说,理解代码的内部细节和抓住基本概念对于iOS编程是很有必要的。对于某些技术概念,如果你没有丝毫的编程背景来说,理解一些技术概念是有一定难度的。但是,别担心,这里仅仅是一个开始。如果你继续学习后续的教程,写出更多的代码,你就能更好的理解iOS编程。尽你所能努力学习更多知识吧!

Interface Builder, Header and Implementation Files

首先,.xib, .h, .m文件是什么呢?这是一位读者提出的一个非常好的问题。在项目导航中,你应该可以找到3种主要的文件类型:.xib, .h, .m。(如果你打开“Supporting Files”文件夹,你可以找到其他的文件类型,例如plist和framework。但到目前为此,我们先忘掉它们,在今后课程中我们会讨论它们。)

.xib

  • 如果一个文件也有.xib的扩展名,它们是Interface Builder文件,存储了应用的UI。当你点击了.xib文件,Xcode会自动的打开Interface Builder界面,你可以通过拖动和放下来编辑应用的UI。如下图所示:
Interface Builder in Xcode

Interface Builder in Xcode

.h and .m

  • .h扩展名的文件表示这是头文件.m扩展名表示是具体的实现。和其他大多数编程语言一样,Objective-C的源码也分为2部分:接口实现

为了便于你更好的理解这2者关系,我们拿电视遥控器打比方。我们可以很方便地使用无线遥控器调节电视的音量。你按下音量+按钮增大扬声器的音量。切换频道时,你只需要按下频道数字。那我来问问你,你知道当你按下音量按钮的背后发生了什么吗?估计你不知道吧。我相信大部分人都不知道遥控器和扬声器之间是如何通信的。我们仅仅知道的是,那个按钮是用来调节音量的。在这里,按钮就是接口,而按钮之后的具体细节我们称之为实现

现在你应该对接口和实现有了一个更深的理解。让我们回到代码,在Objective-C语言中,一个类的接口是放在.h文件中。我们使用语法标示符@interface来声明一个类的接口。看下HelloWorldViewController.h的具体实现:

@interface HelloWorldViewController : UIViewController

-(IBAction)showMessage;

@end

HelloWorldViewController这个类名以“@interface”开头。内部则声明了一个“showMessage”的实现,也可以称之为方法

就像音量按钮,显然我们不知道showMessage这个方法是如何运作的。你仅仅知道它是用于在屏幕上显示一条信息。具体的实现则放在HelloWorldViewController.m文件中,如下所示:

@implementation HelloWorldViewController

// I've removed other methods for better reading. Focus on the showMessage method first.

- (IBAction)showMessage 
{
    UIAlertView *helloWorldAlert = [[UIAlertView alloc]
                                initWithTitle:@"My First App" message:@"Hello, World!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

    // Display the Hello World Message
    [helloWorldAlert show];
}

@end

正如你上面所示,你使用“@implementation”去声明一个实现。在“showMessage”中,代码用于定义在屏幕中弹出一条警告。你不需要弄明白在“showMessage”的方法中每一行代码具体含义。简单来说,创建了一个以“My First App” 为标题,“Hello, World”作为消息的UIAlertView。然后调用“show”方法去请求iOS用于在屏幕上显示一个弹出消息。如下图所示:

Hello World App
阅读全文 »

By Long Luo

2014年的51 3天假期,有2个上午都去学车去了,因为不久之后我就要去考试了,总之呢,很多事情都是做的越早越好。今天把科目二考试的一些注意事项给记下来:

0. 准备工作

上车之后,第一步是调好靠背,后视镜,注意座椅不要调到太靠前,系好安全带。后视镜要保持后轮车毂在后视镜中间位置,把手在后视镜上方。

松手刹,踩住离合器和刹车,离合器踩到底,挂一档起步,慢慢松离合器,直到车头开始震动,离合不动,慢慢松刹车,车辆起步。

最重要的是要踩好离合器,保持很慢的速度,因为速度慢了可以慢慢调整,快了的话就没办法调整了。

1. 曲线行驶

车身调正,保持车身偏右进入,“”字压着右边边线,进入之后,保持”“字压着边线,转弯时,方向盘不动,直到车头角压着左边边线,方向盘右转一圈半,之后保持字压着边线。

Ok。

2. 直角转弯

车身调正,保持车身偏右进入,“”字压着右边边线。直到车头盖压住前面边线,迅速向左打死方向盘,车身平行之后,迅速调正方向盘。

Ok。

3. 坡道定点停车

车身调正,一直打左转向灯,保持字和字的中间压着黄线左边缘,慢速行驶。当左后视镜刚好可以看到双黄线的上边缘,踩住刹车。

Ok。

4. 侧方停车

车身调正,保持字压着右边黄线,慢速行驶。慢慢调到距离右边黄线为30公分左右,从右后视镜观察。当与二号角与窗口锁重合时,停车。方向盘向左打到死,直到字压到黄线中间,停车。

方向盘调正,右转半圈,踩住刹车,挂倒档,开始倒车,注意左后视镜,当观察到后轮轮胎碰到黄线时,迅速向左打死方向盘,直到车头盖缝隙与左边线平行,停车。

打左转向灯,踩住刹车离合器,挂一档,直到字压住左边黄线,向右调整方向盘。直到字压住右边线,方向盘回正。

Ok。

5. 倒车入库

倒车入库是5项中最难的。

调整车头盖左边缝隙压住左边边线,车身调正,当桩与右窗口重合时,下车查看,保持车尾与2个桩在一条直线上。

上车,方向盘向右打死挂倒档,观察右后视镜,当车毂与角间隔一个篮球宽度时,方向盘向左回一圈,观察左后视镜,当车身与边线平行,方向盘回正,当后视镜完全遮住时,间隔0.5s,停车。

起步观察,车身两边距离宽度是否一致,哪天多向哪边调,调半圈后回正,观察左窗口锁,当与线重合时,方向盘向左调一圈半,保持方向盘不动,直到左车门把手与线重合,停车。挂倒档,方向盘不动,观察左后视镜,直到左车毂与角间隔30公分,向左打死方向盘,车身回正时,方向盘回正,观察后视镜是否压住线。

Ok。

Long Luo Created at AM12:20 ~ 13:15 @May 03rd, 2014 at Shenzhen, China.

By Long Luo

最近面试时遇到一个算法题:

仿照Excel的列编号,给出一个数字,输出该列编号字符串。 例如:A对应1,Z对应26,AA对应27,AZ对应52 ……

这个题目是一个典型的26进制思路去处理,一个整数除26然后但是这个题目里面有很多陷阱,在1, 26, 52等特殊情况进行考虑,经过晚上接近半个多小时的编写,完成的代码如下:

C++

C++实现如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <string.h>

using namespace std;

//函数itos:正整数到编号转换
//num:输入的正整数,pcout:输出,Max:输出控件最大长度
void itos(int num, char *pcout )
{
char *res = new char[255];
int m = 0, n = 0;

while((num >= 1) && (n < 255))
{
m = num % 26;
if (m != 0)
{
res[n] = 'A' + m - 1;
}
else
{
res[n] = 'Z';
num--;
}

num /= 26;
n++;
}

for(m = n; m > 0; m--)
{
pcout[n - m] = res[m - 1];
}

pcout[n] = '\0';
delete[] res;

return;
}

//soti:字符串到数字的转换
int stoi(char *cha)
{
int m = 0, n = 0, i = 0, val = 0, a = 0;
char *pc = cha ;

while(*pc != '\0' )
{
//后移到个位
pc++;
n++;
}

for(i = 1; i <= n; i++)
{
//位循环
pc--;
a = i;
m = 1;

while(a > 1)
{
//位权
m *=26;
a--;
}

m *= (*pc - 'A' +1);
val += m;
}

return val;
}

int main()
{
char out[255] = {0};
printf( "out = %s\n", out);
itos(32, out);
printf( "out = %s\n", out);

getchar();

return true ;
}
阅读全文 »

By Long Luo

下面列举一些收藏的资源,用于学习参考:

1. Android API Guides

  1. Android API Guides:
  2. OSChina Android API Guides:

2. Java Develop Kit References

  1. JDK7 English:
  2. JDK6 Chinese API:

3. Performances

  1. Best Practices for Performance:
  2. 性能优化系列总篇
  3. 图片ImageCache技术
  4. 图片SD卡缓存技术
  5. 性能优化之数据库优化
  6. Android网络缓存

4. Developing

  1. Android开发者必知的开发资源
  2. StackOverFlow@Android

5. OpenSource App

Long Luo Version0.1 Created at 2014/4/8 10:54:32 @Shenzhen, China. Long Luo Version0.2 Update at 2014/4/9 19:45:07 @Shenzhen, China.

0%