IOS实习周记26篇.docx
《IOS实习周记26篇.docx》由会员分享,可在线阅读,更多相关《IOS实习周记26篇.docx(210页珍藏版)》请在冰豆网上搜索。
IOS实习周记26篇
第一周
实习第一个礼拜,算是适应期。
主要了解一些公司的背景、产品、发展方向等。
刚到实习公司,不是像学校里的朝九晚五,而是朝八晚六。
我们不可能简单的了解一些企业文化,简单的学学新的知识就可以了,我们的这个实习必将是一个繁忙的实习,也必将是一个充实的,进步的实习。
来到这里,我们要忘掉大学里自由的作息时间,克服困难,养成良好的工作生活习惯 。
基于各方面的原因,虽然在去之前我们做了比较充足的准备,但还是遇到了一些困难,例如学习时间长,实战比较繁多,但时间又比较的短,难以保证按时按质按量完成。
下午下了班,员工们都回去了,我还在那儿练习,一直到晚上8点,才能回住处休息。
中午也没有休息的地方,只能趴在电脑前休息一会,一周下来,相当地疲惫。
但我们都明白自己来实训的任务,都坚持着完成自己的任务和使命。
这个星期熟悉了工作环境、C编程以及Xcode的环境配置。
等慢慢熟悉起来,做起事情也越来越顺手了.简单的总结为几个字,那就是:
多看,多问,多观察,多思考!
第二周
实习第二个礼拜,主要是熟悉Object-c的基础语法,把基础打扎实,以后在开发中才能如鱼得水。
学习总结如下几点:
1、类之间的关系:
实现以及调用。
2、基本数据类型:
整数型、浮点型、字符型、布尔型。
3、常用逻辑语句和循环语句:
switch只支持int类型判断,没有写break易穿透至下一个循环。
Break:
强行退出循环;
5、修饰符:
实例方法和类方法。
设置调用权限。
6、Static关键字:
声明全局变量,它修饰的变量可以全局调用。
7、self关键字:
指向自身引用。
8、string:
字符串类型。
(两个string变量可以通过拼接成为一个字符串)
第三周
实习第三个礼拜,主要是熟悉OC的高级语法(核心)
iOS程序是基于Objective-C语言的,可以认为iphoneSDK就是O-C上的各种框架的集合,O-C是学习iOS开发的基础,从基础做起是我的研究之道。
进入Mac系统后,需要安装XCode,这是iOS程序开发的IDE,此时可以注册为Apple的开发者,申请一个免费的ID后就可以在Apple开发者网站下载XCode了。
打开XCode后,选择XCode,打开Preferences,选择Download选项卡,如下图所示。
在这里需要可以安装CommandLineTools。
之后就可以在Terminal中来编写代码,当然也可以直接使用XCodeIDE。
打开终端Terminal,创建一个文件夹来作为我们程序开发的文件夹,然后创建我的一个O-C文件first.m,如下图所示:
之后编写如下所示的代码:
那么按如下所示操作:
编译后没有任何问题,那么就直接执行程序即可。
得到了一行输出,可以看上图所示内容。
同时在Progs文件夹中,看到了可执行文件的生成:
此时点击-first,那么就会启动程序,得到如下内容:
这个输出和上面得到的是一样的。
下面来解释第一个程序,逐行来看:
#import,这句话会告诉O-C编译器(示例中使用的是LLVMClangObjective-C)找到并处理头文件Foundation.h,这是一个系统的头文件,因为后续要使用其中定义的类或函数,所以必须导入。
#import表示将该文件导入到当前程序中,可以类比Java中的import导包语句。
接下来是主函数声明:
intmain(intargc,constchar*argv[]),主函数表示程序从这里开始执行,这在C/Java中都是一致的,只是函数的参数略有不同罢了,其返回值为int型。
下面进入主函数体部分,第一句是@autoreleasepool{},字面含义是自动释放池,也就是说其中的语句会放到自动释放池的语境中执行。
自动释放池机制可以在创建新对象时,系统可以有效管理所使用的内容。
关于其具体内容这里先不解释。
在自动释放池中只有一条语句:
NSLog(@"HelloWorld!
"),这是一个函数调用,NSLog函数接受了参数@"HelloWorld!
",这里的@表示字符串类型为NSString,如果不加@,那么就是普通C类型的字符串。
NSLog是一个系统函数,它会输出其参数或者参数列表中的内容。
main函数中最后一句是return0,这是主函数声明时需要的返回值,在这里0表示程序正常结束。
使用clang编译Objective-C程序时,需要使用-framework来指定我使用的库Foundation,-o表示生成目标文件的名称,设置为-first,那么成功编译后,就看到了生成的可执行文件,在Terminal中使用./-first来执行程序就会得到输出,当然也可以点击可执行文件来打开它。
下面来看怎么在XCode中创建项目,首先打开XCode:
选择第一项CreateanewXCodeproject,然后弹出如下窗口,继续设置:
这里选择CommandLineTool,也就是控制台的程序,点击Next继续:
为我的应用项目命名,然后选择Type为Foundation,其含义之前都说过了,然后点击Next继续:
选择项目的存放位置,这里使用默认的位置-桌面,之后点击Create创建项目,那么我在XCode中就得到了一个系统自动为我生成的项目Prog1:
打开main.m,这个O-C源文件是系统自动为我生成的,可以看到其内容在XCode环境中已经高亮显示了,来看一下完整的代码:
C代码
1.//
2.// main.m
3.// Prog1
4.//
5.// Created by Nan Lei on 12-12-25.
6.// Copyright (c) 2012年 Nan Lei. All rights reserved.
7.//
8.
9.#import
10.
11.int main(int argc, const char * argv[])
12.{
13.
14. @autoreleasepool {
15.
16. // insert code here...
17. NSLog(@"Hello, World!
");
18.
19. }
20. return 0;
21.}
这里系统为我加了很多注释,在O-C源代码中使用注释和C语言是一样的,就是单行的双斜杠//和多行的/*...*/注释段。
主体程序和我之前编写代码是完全一致的,在XCode中点击XCode左上方的Run按钮来运行程序:
编译成功后会得到输出,就是一句HelloWorld!
我们修改源代码再做一组测试:
代码如下:
C代码
1.#import
2.
3.int main(int argc, const char * argv[])
4.{
5.
6. @autoreleasepool {
7.
8. // insert code here...
9. NSLog(@"Programming in Objective-C is fun!
");
10. NSLog(@"Testing...\n1.\n2..\n3...");
11.
12. }
13. return 0;
14.}
这里看到的结果是和C/Java中都是类似的,使用\n表示换行,那么得到的输出自然也是带换行的了。
在学习C语言的过程中,认识了第一个程序,紧接着就是变量的表示了,那么在O-C中,变量的表示方法和C语言都是一致的,看如下的程序:
C代码
1.#import
2.
3.int main(int argc, const char * argv[])
4.{
5.
6. @autoreleasepool {
7. int sum,v1,v2;
8.
9. v1=12;
10. v2=25;
11. sum=v1+v2;
12.
13. NSLog(@"The sum of %i and %i is %i",v1,v2,sum);
14.
15. }
16. return 0;
17.}
在XCode中运行后,我得到如下输出:
这里就使用了NSLog函数的参数列表输出功能,%i表示此位置输出的是整型,那么后面的参数会按照位置顺序来填充到相应的位置中去。
就得到了我想要的结果。
第四周
实习第四个礼拜,主要熟悉了OC的对象思想
字面来理解Objective-C就是对象化的C,那么也就是说O-C是对C的扩展,加入了对象的概念。
当然C++也是有对象概念的,只是两者的编译环境有所不同。
面向对象的概念不是针对某一种编程语言而言的,它是一种程序设计思想。
最基本的面向对象包括了类,对象和方法这三个概念。
举日常生活中的例子,比如10路公交车,10路有几十辆车,每一辆车都是一个对象,10路并不是拥有任意一辆车,而是分配给它的特定的车。
每一辆车都会有一个编号,这在公交系统中是唯一的。
那么在面向对象术语中,10路的任意一辆车都是公交车的一个实例。
定义Vehicle为汽车类的类名,那么一辆车就是从该类创建的。
每制造一辆车,都会创建汽车类的一个新的实例,而汽车的每个实例都称为一个对象。
不同车辆的型号不同,那么会有不同的属性,比如载客量,功率等。
而使用车辆执行特定的操作,比如:
加油,起步,到站,(可能还会有)检修,清洗等。
这些操作可以对任意一辆车进行操作。
这些对实例的操作称为方法。
如果想知道该车一共生产了多少辆,那么这个方法是适用在类上的,所以叫类方法。
而想知道每辆车的行驶总里程或者当前油量,那么不同的车会有不同的数值,这个方法就是实例方法。
下面来应用具体的语法来看看Objective-C中的类,分数是一个数学概念,包含两个部分(分子和分母),知道了如何定义变量,那么使用变量,可以这么来表示一个分数:
C代码
1.#import
2.
3.int main(int argc, const char * argv[])
4.{
5.
6. @autoreleasepool {
7. int numerator=1;
8. int denominator=3;
9.
10. NSLog(@"The fraction is %i/%i",numerator,denominator);
11.
12. }
13. return 0;
14.}
这里只是用于显示,并没有考虑分母为0的情况,当然这么写就是分母为0也不会有问题,因为代码中并没有真实的分数计算。
运行代码,就会得到输出:
下面编写一个Fraction类来表示分数,在项目Prog1上点击右键,选择NewFile,然后看到如下图所示窗口:
选择Objective-Cclass类型,点击Next继续:
给我的分数类起个名字Fraction,类型已经为我选好了,就是NSObject类型,点击Next继续:
选择一个位置,将这个类保存在Prog1下,直接点击Create创建即可,得到如下图所示的两个文件:
Fraction.h是头文件,Fraction.m是Objective-C的类文件,在头文件中,需要编写@interface部分,代码如下:
C代码
1.//
2.// Fraction.h
3.// Prog1
4.//
5.// Created by Nan Lei on 12-12-25.
6.// Copyright (c) 2012年 Nan Lei. All rights reserved.
7.//
8.
9.#import
10.
11.@interface Fraction :
NSObject
12.
13.-(void) print;
14.-(void) setNumerator:
(int) n;
15.-(void) setDenominator:
(int) d;
16.
17.@end
可以先不管这些代码的具体含义,之后在Fraction.m文件中编写类的实现和主函数,代码如下:
C代码
1.//
2.// Fraction.m
3.// Prog1
4.//
5.// Created by Nan Lei on 12-12-25.
6.// Copyright (c) 2012年 Nan Lei. All rights reserved.
7.//
8.#import "Fraction.h"
9.
10.@implementation Fraction
11.{
12. int numerator;
13. int denominator;
14.}
15.
16.-(void) print
17.{
18. NSLog(@"%i/%i",numerator,denominator);
19.}
20.
21.-(void) setNumerator:
(int)n
22.{
23. numerator=n;
24.}
25.
26.-(void) setDenominator:
(int)d
27.{
28. denominator=d;
29.}
30.
31.@end
32.
33.
34.int main(int argc, const char * argv[])
35.{
36. @autoreleasepool {
37. Fraction *myFraction;
38.
39. myFraction=[Fraction alloc];
40. myFraction=[myFraction init];
41.
42. [myFraction setNumerator:
1];
43. [myFraction setDenominator:
3];
44.
45. NSLog(@"The value of myFraction is:
");
46. [myFraction print];
47. }
48. return 0;
49.}
代码已经写完,下面先运行出效果看看。
这里注意在一个项目中不能有两个主函数的定义存在,那么要把之前main.m文件删除,确保运行没有问题,点击Run,就会得到如下输出:
代码运行没有问题,来看看这两个文件中的代码都是什么意思。
先看头文件,这中间#import很好理解,就是导入系统类。
之后的@interfaceFraction:
NSObject...@end是类的定义部分。
以@interface开始,后面跟着类名,冒号后面是父类的名称,说明我的类是继承自NSObject的,关于继承的概念这里先不说。
那么中间的代码就是类中方法/类属性定义了。
关于类名的命名规则,方法名的命名规范,这里就不再多说,按照习惯和约定来编写即可。
首先对于一个方法,开始为负号(-),这是告诉Objective-C的编译器,该方法是一个实例方法,如果是正号(+),那么该方法就是类方法,注意和UML中的+/-区分,这里的+/-不表示访问控制。
紧跟正负号后面的是方法返回值,这里我们定义的三个方法都是(void),无返回值类型的。
那么这里可以使用(int)作为整型返回值,(double)作为双精度浮点型返回值。
返回值定义后面的就是方法名,如果该方法没有参数,直接分号结束即可,比如-(void)print;
如果方法接受参数,那么在方法名后面加上冒号,冒号之后是参数定义,也是(参数类型)参数名称的格式,比如(int)m。
那么我们在头文件中编写的所有代码的含义就都明白了。
下面来看.m文件,首先是#import"Fraction.h",表示导入定义的头文件,而头文件中已经导入了Foundation.h,那么这里也会自动导入Foundation.h。
@implementationFraction...@end是实现部分。
格式就是@implementation后跟着类名,以@end结束。
在@interface部分我们没有定义属性,因为本例中的变量都是成员变量而不是类属性,一组大括号中放置的是实例变量定义,比如本例的
C代码
1.{
2. int numerator;
3. int denominator;
4.}
之后是对方法的实现,方法声明后的一对儿大括号内就是具体的方法实现代码,本例中对print方法的实现就是调用系统的NSLog函数,而setNumerator和setDenominator方法就是赋值操作。
最后是主函数部分,就是我的具体业务代码实现,Fraction*myFraction;表示声明一个引用(指针)变量myFraction,其类型是Fraction。
有了引用,要创建一个分数,可以使用myFraction=[Fractionalloc];来完成,alloc是allocate的简写,表示为新的对象分配内存空间,这个写法就是告诉Fraction类要执行alloc方法,现在这个方法我们没有定义,那就是系统类库提供的。
使用alloc分配空间后,紧接着是[myFractioninit];这要对我的myFraction变量进行初始化。
同理,init也是系统提供的初始化方法。
和alloc方法一起,可以看做Java中的newFraction()来生成一个Fraction对象,其实这里使用new方法来合并alloc方法和init方法也是可以的,写为Fraction*myFraction=[Fractionnew]。
以上两个语句可以合并为
Java代码
1.Fraction *myFraction=[[Fraction alloc] init];
来写,这是O-C编程中比较常见的语句。
之后的[myFractionsetNumerator:
1];是告诉myFraction调用setNumerator方法,并且提供了一个变量1作为参数。
同理[myFractionsetDenominator:
3];就好理解了。
之后的NSLog代码不再解释,最后的[myFractionprint];就是调用myFraction的print方法来打印Log了。
这里没有release操作,因为我使用的XCode版本高于6,系统会默认开启ARC机制,自动释放内存。
下面来看使用多个分数的示例(主函数部分如下,其余内容和之前相同):
C代码
1.int main(int argc, const char * argv[])
2.{
3. @autoreleasepool {
4. Fraction *frac1=[[Fraction alloc] init];
5. Fraction *frac2=[[Fraction alloc] init];
6.
7. [frac1 setNumerator:
1];
8. [frac1 setDenominator:
3];
9.
10. [frac2 setNumerator:
1];
11. [frac2 setDenominator:
5];
12.
13. NSLog(@"First fraction is:
");
14. [frac1 print];
15.
16. NSLog(@"Second fraction is:
");
17. [frac2 print];
18. }
19. return 0;
20.}
运行程序,得到如下输出:
说明程序的编写是没有问题的。
回过头来看Fraction*frac1=[[Fractionalloc]init];这说明声明了一个指针类型的引用变量*frac1,创建的对象是Fraction,在alloc后内存中创建出该对象并返回内存地址给指针变量*frac1,申请完空间需要对对象进行初始化,所以就用到了init方法。
从本例中可以看出,每创建一个新对象时,它都会有自己的一组实例变量。
上面给出的是为实例变量复制的set方法,但如果想通过对象引用来访问实例变量,在O-C中却做不到,此时需要编写新的方法来获取实例变量的值,这里就涉及到了“数据封装”