IOS编程之iOS使用开辟进门指南 - 编写 Objective-C 代码仓酷云
CoreAnimation---制作动画很强大很喜欢的框架可以用少量的代码写出漂亮的动画CQuartz2D---强大的2D绘图库COpenGL---不用介绍了超级强大的3D库CCoreImage---假如你刚入手下手打仗iOS或MacOSX编程,起首要进修一点编程言语Objective-C进门常识。Objective-C并非一门庞大的言语,经由一段工夫的打仗,你就可以体味到它的文雅。Objective-C言语完成了严厉的面向对象编程。它扩大了尺度ANSIC言语,增添了界说类和办法的语法。它还奉行类和接口的静态扩大性,使任何类都能适配和接纳。假如你已把握了ANSIC言语,上面的内容可以匡助你把握Objective-C的基础语法。假如你有其他面向对象编程言语的基本,你会发明Objective-C中含有大批传统的面向对象观点,比方封装、承继、多态性等。反过去,假如你对ANSIC尚不熟习,我们真挚倡议您在浏览本文之前,先最少浏览一篇关于C言语的先容。
在《TheObjective-CProgrammingLanguage》中完全解说了Objective-C言语。
关于Objective-C
Objective-C言语划定了一系列用来界说类和办法的语法,和用来奉行类和可顺应接口的静态扩大的布局。
C言语的超集
既然是C言语的超集,Objective-C撑持一切C言语的基础语法。你能够持续按你的习气誊写代码,比方原始范例(int、float等)、布局、函数、指针,另有历程把持语句比方if…else和for语句。你可使用尺度C言语库,好比stdlib.h和stdio.h中声明的内容。
Objective-C在ANSIC的基本上增添了以下内容:
[*]界说新类的语律例约
[*]类和实例办法的规约
[*]挪用办法的语法(称为动静机制)
[*]声明属性并从中分解存取办法的语法
[*]静态和静态范例的规约
[*]块对象(Block)-封装起来的代码片断,能够在任什么时候候被实行
[*]对基础言语的扩大,比方协定、范围类等
假如如今还不分明这些Objective-C观点也不用忧虑。当你持续浏览前面的内容时就会进修这些观点。假如你是初度打仗面向对象观点的开辟者,能够先把对象设想成一个含有函数的布局。这个比方不算太离谱,特别对运转时的完成而言。
Objective-C的上风
Objective-C不但供应了其他面向对象编程言语中的笼统观点和运转机制,并且仍是一种十分天真的言语,这类静态性就是Objective-C的最年夜上风地点。这类静态性可让使用在运转中(即“运转时”)判别其该有的举动,而不是在编译构建时就流动上去。因而,Objective-C把使用程序从编译时、毗连时的限定中束缚出来,并在用户把握把持权时,更多依附于运转时的标记剖析。Objective-C的静态性来自三个方面:
[*]静态范例可让你的代码在运转时判别对象的范例。id数据范例能够在运转时用任何数据范例来交换。以是,你可让运转时要素来决意代码顶用到的对象是甚么范例。静态范例让你的使用加倍天真,这是静态范例做不到的,不外这会让数据的严厉一致性下降。
注重:静态类性中的类都是流动品种的(好比NSString*var),它有本身的上风,实践上用途比静态范例更普遍。打个例如,利用静态范例,编译器就能够完整剖析你的代码。这让代码功能和可预知性更高。在其他面向对象编程言语中,静态范例偶然被成为弱范例,静态范例被成为强范例。
[*]静态绑定让你的代码在运转时判别必要挪用甚么办法,而不是编译时。就像静态范例把对象的范例放到运转时再往判别一样,静态绑定把选择挪用哪一种办法的义务放到了运转时往完成。和其他面向对象言语一样,办法挪用和代码并没有在编译时就联合在一同,只要在动静收回时,它们才真正联合。静态范例和静态绑定的存在使得选择哪一个吸收者和挪用哪一个办法都能够在运转时来决意。用一个绘图程序来打例如,它可以界说从父类承继而来的图形类应当如何回类;你能够间接在某个对象上挪用draw办法,无需晓得该对象的类和它绘制本人的详细路子。
[*]静态载进可让你的程序在运转时增加代码模块和其他资本。有了静态载进特征,使用能够依据必要加载一系列可实行代码和资本,而不是在启动时就加载一切组件。这可以年夜年夜进步功能。可实行代码中能够含有和程序运转时整合的新类。
类和对象
和其他年夜部分面向对象编程言语一样,Objective-C中的类也撑持封装数据,和界说能够在该数据上实行的举措。对象是运转时类的一个实例。在类里声了然的实例变量和办法,它的每一个实例都在内存中具有一样的实例变量,和指向那些办法的指针。创立一个对象时,你必要经由两个步骤:内存分派(allocation)和初始化(initialization)。
Objective-C中的类有本人的标准请求,必需包含两个分歧的部分:接口(interface)和完成(implementation)。接口部分含有类的声明、实例变量和相干办法的声明。既然是作为C言语,经由过程分离界说头文件和源文件,你就能够将私有声明和详细的完成代码给分别开来。(你能够在完成文件里放一些声明朝码,由于有些情形下,它们配合组成一个公用程序里的接口部分。)下表列出了这些文件的后缀和区分:
后缀、源文件范例:
[*].h–头文件。头文件含有类、范例、函数和常量的声明。
[*].m–源文件。这个后缀的源文件能够同时包括Objective-C和C言语的代码。
[*].mm–源文件。这个后缀的源文件能够同时包括C++、Objective-C和C言语的代码。只要在你的Objective-C代码顶用到了C++的类大概特征时才必要利用这个后缀。
假如必要在源代码中包括头文件,你必要利用#import命令,和C言语中的#include命令相似。二者的区分在于,#import可以包管头文件只被包括一次。
中是一段的类声明的语法展现,声了然一个叫做MyClass的类,它承继于基础类(或根类):NSObject。(根类能够被一切的其他类间接或直接承继。)类声明开首是一条编译器指令@interface,开头是一条@end指令。在类称号后边(两头用冒号分开),是父类的称号。在Objective-C中,每一个类只能有一个父类。类中包括的实例变量(偶然被称为ivar,在其他编程言语中偶然被称为成员变量)的声明被一个花括号({和})包裹起来。实例变量是可选的。在实例变量语句块下边是属性(图中没有写出来)和类的办法声明。每一个实例变量和办法声明的语句开头都要有一个分号。
<br>
一段类声明
类的完成的语法也是相似的。开首是编译器指令@implementation(前面有类的称号),开头是@end指令。办法的完成代码就在这两个指令的两头。完成代码中必需导进它的接口文件,写在代码的第一行。
#import“MyClass.h”
@implementationMyClass
-(id)initWithString:(NSString*)aName
{
//在这里誊写代码
}
+(MyClass*)myClassWithString:(NSString*)aName
{
//在这里誊写代码
}
@end
我们之前讲过,Objective-C撑持包括对象的静态范例变量,它同时也撑持静态类性。静态范例变量的声明前边要有所述类的称号。而静态范例变量声明以id来代表对象。在某些情况下,你会用到静态范例变量。好比,一个数组如许的对象汇合(内里包括的对象范例多是没法预知的)就会用到静态范例变量。如许的变量可以供应非常天真的功效,使得Objective-C程序可以具有更年夜的静态性。
上面的例子展现了静态范例和静态范例变量的声明体例:
MyClass*myObject1;//静态类性
idmyObject2;//静态范例
NSString*userName;//曾呈现在“你的第一个iOS使用”中(静态范例)
请注重第一个声明里的*星号。在Objective-C言语中,对象永久是经由过程指针来援用的。假如如今你还不克不及分明这句话的意义也不用忧虑,在学会Objective-C基本以后再研讨指针也不迟。如今你必要记着的,是在静态范例变量声明时,变量称号后面必定要有*星号。而id范例则表示它是一个指针。
办法和动静
假如你方才入手下手打仗面向对象编程,无妨先把“办法”设想成每一个对象独有的一个函数。经由过程向一个对象发送动静,你便挪用了对象的某个办法。Objective-C中有两种办法:实例办法和类办法。
[*]实例办法望文生义,它的感化域仅在某个类的一个实例傍边。换句话说,在挪用某个实例办法之前,你必需先创立一个实例才行。实例办法是最多见的办法。
[*]类办法则是指其感化域包含该办法地点的全部类。它不请求某个对象的实例作为动静的吸收者。
办法的声明由以下几个部分组成:办法范例标识符,前往范例,一个或多个办法署名关头字,和参数范例和称号。上面的图中是实例办法insertObject:atIndex:的声明语句。
<br>
在实例办法中,声明的开首是一个–减号;而声明类办法时后面要利用+加号。下文的“类办法”章节将具体报告类办法的观点。
办法的称号(insertObject:atIndex:)是一系列办法署名关头词联合而成,包含冒号。冒号暗示将会呈现参数。在下面的例子中,这个办法含有两个参数。假如某个办法没有参数,则必要将第一个(也是独一一个)办法署名关头词前面的冒号省略失落。
当你必要挪用一个办法时,就是要向完成了该办法的对象发送一个动静,简而言之,就是给对象发送动静。(固然“发送动静”经常用作“挪用办法”的近义词,可是在Objective-C的运转时中,实践情形是发送动静。)一个动静就是一个办法的名字带上该办法所需的参数信息(要和数据范例准确对应)。你向对象发送的一切动静都是静态调剂的,以此来完成Objective-C言语的多态性。(多态性是指:分歧范例的对象都能对统一种动静做出回应。)偶然,所挪用的办法是由吸收动静的对象的类的父类完成的。
要调剂一个动静,运转时请求准确的动静表达体例。动静表达式由一对方括号([和])把动静(和所需的参数)包裹起来,吸收动静的对象写在右边括号后边。好比,要向myArray变量所含的对象发送一个insertObject:atIndex:动静,你要按上面的语法举行誊写:
;
为了不声明大批部分变量来存储一时了局,Objective-C同意嵌套动静表达式。每一个嵌套的表达式前往的值城市作为一个参数,大概吸收动静的对象,乃至是另外一个动静。好比,你能够将上一个例子中的恣意一个变量交换成用动静吸收数值。如许一来,假如你另有一个叫做myAppObject的对象,它含有会见数组对象和将对象拔出数组的办法,你能够将谁人例子改革成上面如许:
[insertObject:atIndex:0];
Objective-C还供应了点语法特征,用来会见存取办法。存取办法是对象的get和set语句,这里是封装的关头,封装是一切对象的主要特征。对象把本人的形态封装(或埋没)起来,并供应一个能让一切实例会见这个形态的通用接口。使用点语法,之前的例子又能够被改写成:
;
点语法还能够用来赋值:
myAppObject.theArray=aNewArray;
这个语法实际上是;这个语句的另外一种表述体例。
并且,请回忆一下,在“你的第一个iOS使用”教程里,你已用过点语法来对变量举行赋值了:
self.userName=self.textField.text;
下文中的“已声明的属性和存取办法”章节将向你具体先容存取办法。
类办法
固然之前的典范都是向类的实例发送动静,但你也能够向类本身发送动静。(这里的类,能够被了解为由运转时天生的类的对象。)向一个类发送动静时,该办法必需在之前被声明为类办法,而不是实例办法。类办法和C++中的静态办法很类似。
你一般会将类办法用作工场办法,借以创立该类的新的实例大概会见与该类相干的某些共有信息。类办法的声明语法和实例办法的非常相像,分歧的地方是办法范例标识符是一个+加号,而不是–减号。
上面的例子展现了怎样把一个类办法看成该类的工场办法举行挪用。在本例中,array办法是NSArray类的一个类办法,而且被NSMutableArray类承继。它会给这个类的新实例分派内存并将这个实例初始化,最初把它前往给你的代码。
NSMutableArray*myArray=nil;//nil实质上同等于NULL
//创立一个新数组,并将其赋值给myArray变量。
myArray=;
已声明的属性和存取办法
一个属性,按一般的了解就是对象封装的形态里的一项。它要末是一个特征,好比名字大概色彩;要末是与另外一个或多个其他对象的联系关系。对象的类界说了一个接口,利用该对象的用户能够猎取(get)和设置(set)封装属性中的数值。而实行这个功效的办法就叫做存取办法。
存取办法共有两种,且都要切合一套定名规约。“Getter(取值器)”存取办法可以前往某个属性的值,它的办法名和该属性同名。“Setter(赋值器)”存取办法可以给某个属性付与新的值,它的定名规约是set属性称号:如许的情势,属性称号的首字母年夜写。在Objective-C框架中,只要严厉依照规约对存取办法举行定名才干完成多种手艺。
Objective-C供应了已声明的属性,能够作为声明的便当路子,偶然还能作为存取办法的完成。在“你的第一个iOS使用”教程中,你已经声了然userName属性:
@property(nonatomic,copy)NSString*userName;
已声明的属性使得getter和setter办法无需在类里显式声明。相反,你在声明属性时能够决意其详细举动体例,然后请求编译器基于属性声明,天生(或说创立)实践可用的getter和setter办法。已声明的属性削减了大批不用要的代码,节俭开辟者的工夫,而且让你的代码加倍清新、削减堕落的大概。
在类接口文件中,要包括属性声明和办法声明。基础的声明要利用@property编译器指令,前面是属性的范例和称号。你还能够为属性设定分歧的选项,也就是说能够调剂存取办法的详细举动体例,好比属性是不是为弱援用,大概是不是为只读属性。这些选项写在@property指令后边的圆括号中。
下边的几行代码展现了更多属性声明的例子:
@propertyBOOLflag;//默许是只声明范例和称号
@property(copy)NSString*nameObject;//在赋值过程当中拷贝对象
@property(readonly)UIView*rootView;//只声明getter办法
在类的完成代码中,你要利用@synthesize编译器指令来请求编译器依据声明的情形,天生存取办法:
@synthesizeflag;
@synthesizenameObject;
@synthesizerootView;
你也能够把@synthesize语句放到一行内里:
@synthesizeflag,nameObject,rootView;
在@synthesize指令中,你还能够命令编译器增加响应的实例变量到类界说中往。要增添一个实例变量,在属性的称号前面写一个等号,然后写你想要的实例变量称号:
@synthesizenameObject=_nameObject;
块对象
块对象是封装了一系列功效的一个对象,大概更普通地讲,它是一个代码片断,可以在任什么时候刻被实行。它们实质上就是可移植的匿名的函数,能够作为其他办法的参数传进,也能够作为其他办法或函数的前往值。块对象自己有含范例的参数表,大概带有不断定的或已声明的前往值范例。你能够把一个块对象赋值给某个变量,然后在你必要的时分像挪用函数一样挪用它就好了。
脱字符(^)是块的语法标志。另有依照我们熟习的参数语律例约所界说的前往值和块对象的主体(也就是能够实行的代码)。下图是怎样把块对象赋值给一个变量的语法解说:
<br>
接上去,依照挪用函数的体例挪用块对象变量就能够了:
intresult=myBlock(4);//了局是28
块对象能够在部分感化域以内共享数据。块对象的这个特征十分有效,假定你完成了一个办法,该办法界说了一个块对象,那末这个块对象就能够会见该办法内的部分变量和参数(包含仓库变量),也能够会见函数和全局变量,乃至包含实例变量。这类会见是只读性子的,但假如变量声明利用了__block润色符,则它的值能够在块对象中被改动。即便在办法或函数封装的块对象前往一个值并烧毁其感化域以后,只需对该块对象的援用不用掉,部分变量作为块对象的一部分将一向存在。
和办法、函数的参数相似,块对象能够被看成一个回调函数。当办法或函数被挪用时,它们会实行某些功效,并在符合的机会回调之前挪用它们的代码(经由过程块对象),来哀求附加信息,大概从中猎取程序特定的举动。块对象让挪用者可以在挪用的时分供应回调代码。块对象不会将哀求数据打包到一个“高低文”布局中,而是从办法或函数的不异感化域中捕捉数据。因为块对象代码无需在独自的办法或函数中别的完成,以是你的完成代码可以变得加倍简便,可读性更强。
Objective-C框架有很多带有块对象参数的办法。好比这段,在UIKit框架里声了然以下类办法,它有两个块对象参数:
+(void)animateWithDuration:(NSTimeInterval)durationdelay:(NSTimeInterval)delayoptions:(UIViewAnimationOptions)optionsanimations:(void(^)(void))animationscompletion:(void(^)(BOOLfinished))completion;
这个办法可让你天生一个动画效果。第一个块对象参数用来选择动画效果;第二个块对象参数指定动画完成后要实行的义务。上面的例子中,第一个块对象将视图动画的开头alpha值设为0(让它酿成通明的)。第二个块对象则把全部视图移除。
[UIViewanimateWithDuration:0.2animations:^{
view.alpha=0.0;
}completion:^(BOOLfinished){
if(finished==YES)
;
}];
协定和范围类
协定能够用来声明可以在任何类中完成的办法,乃至那些完成该办法的类承继自其余类。协定办法界说的举动是自力于任何一个类的。协定能够界说一个请求其他类必需答应完成的接口。也就是说,假如你的类完成了协定中的办法,那末这个类就答应要完成该协定。
从有用的角度说来,协定界说了一系列办法,并创建起对象之间的“合约”。而这些对象不用是任何一个断定的类的实例。这个合约使得对象之间能够举行交换。某个对象想要告知另外一个对象,即刻将要面对的事务,大概想要扣问关于那些事务的倡议。
UIApplication类完成了所需的使用举动。你不用为了吸收复杂的使用以后形态的动静而创立一个UIApplication的子类。UIApplication类会挪用指定的托付对象中的特定办法来传送那些动静。完成了UIApplicationDelegate协定办法的对象就可以够吸收到那些动静了,而且可以供应符合的反应。
在答应完成、或接纳某个协定的接口代码中,协定的称号要写在父类称号后边的一对尖括号里(<…>)。在“你的第一个iOS使用”教程里,你接纳了UITextFieldDelegate协定:
@interfaceHelloWorldViewController:UIViewController<UITextFieldDelegate>{
}
@end
在完成中,你无需声明协定办法。
协定的声明看起来和类接口很类似,不外分歧的是协定没有父类,而且不含任何实例变量(但它们可以声明属性)。上面的例子展现怎样声明只要一个办法的复杂协定:
@protocolMyProtocol
-(void)myProtocolMethod;
@end
关于很多托付协定而言,接纳一个协定就即是是完成该协定中界说的办法。有些协定请求你明白声明你会撑持该协定,而有些协定则是既包括必需完成的办法,也包括可选办法。
当你在Objective-C框架中扫瞄头文件时,你很快就会看到相似如许的语句:
@interfaceNSDate(NSDateCreation)
这行语句声了然一个范围类(category),其语法是将范围类的称号包裹在一对圆括号中。范围类是Objective-C言语的一个特征,让你可以扩大某个类的接口,而无需创立它的子类。范围类中的办法将成为此类的一部分(在你的程序感化域局限内),并会被此类的一切子类承继。你能够向此类(或它的子类)的恣意一个实例发送动静来挪用范围类中声明的办法。
你能够使用范围类在一个头文件里构造相互联系关系的办法声明。你乃至能够在分歧的头文件中放进分歧的范围类声明。CocoaTouch框架和Cocoa框架在几近一切头文件中都使用了这个手艺,代码才云云了了。你还能利用匿名范围类(也就是在圆括号中不写任何字符),如许能够把实例变量埋没在公有的完成文件里。
预界说范例和编码战略
在Objective-C言语中有一些特定的辞汇,你要制止在声明变量时利用这些辞汇,由于它们都有专门的用处。个中有一些是编译器指令,以@标记开首(比方@interface和@end)。有些保存辞汇是预界说范例,和和这些范例有关的笔墨。Objective-C利用一系列不属于ANSIC的预界说范例和辞汇。在某些情形下,这些范例和辞汇会取代它们在ANSIC中的对应者。下表列出了几个十分主要的范例,包含每一个范例所同意的辞汇。
范例、形貌和辞汇:
id–静态对象范例。静态范例和静态范例对象的否认辞汇为nil。
Class–静态类的范例。它的否认辞汇为Nil。
SEL–选择器的数据范例(typedef);这类数据范例代表运转时的一种署名办法。它的否认辞汇为NULL。
BOOL–布尔型。代表它的值的辞汇为YES和NO。
你一般会在代码排错和流程把持中利用这些预界说的范例和辞汇。在程序的流程把持语句中,你能够经由过程检测特定辞汇来判别怎样接纳下一步举措。比方:
NSDate*dateOfHire=;
if(dateOfHire!=nil){
//处置此种情形
}
把代码注释一下:假如对象代表的聘任日期不为nil,也就是说是一个正当的对象,那末逻辑就朝一个特定的偏向开展。下边是这段代码的简化版,效果是不异的:
NSDate*dateOfHire=;
if(dateOfHire){
//处置此种情形
}
你乃至能够把代码简化成这个模样(条件是你不必要援用dateOfHire对象):
if(){
//处置此种情形
}
处置布尔值的办法是一样的。在这个例子中,isEqual:办法会前往一个布尔型的值:
BOOLequal=;
if(equal==YES){
//处置此种情形
}
你一样能够依照前边省略nil的体例来简化这段代码。
在Objective-C言语里,你能够对nil发送动静,不用忧虑任何反作用。实在,是基本不会有任何感化,只不外运转时会前往nil,假如办法原本要前往一个对象的话。发送给nil的动静前往的值只需是一个对象,代码就可以持续一般事情。
别的两个主要的预留辞汇是self和super。前者self是个部分变量,你能够在动静完成中把它看作以后对象举行援用;它和C++言语中的this是一样的。你能够用预留辞汇super交换self,但只能作为动静表达式的吸收者。假如你对self发送了动静,那末运转时起首就会在这个对象的类中寻觅响应的办法完成;假如这里找不到,那末它会转而到其父类中往查找(云云来去)。假如你对super发送动静,运转时起首就是往父类中寻觅办法的完成。
使用self和super次要是为了发送动静。当被挪用的办法在self的类中被完成以后,你就能够向self发送动静,比方:
;
self还能够用在点语法中,用来挪用由已声明的属性天生的存取办法,比方:
NSString*theName=self.name;
你经常会在重载(既从头完成已有的办法)从父类承继而来的办法时向super发送动静。在这类情形下,被挪用的办法具有和重载前方法的署名不异。
注:本《iOS使用开辟进门指南》译自苹果官方iOS开辟者资本库中的StartDevelopingiOSAppsToday系列教程。
语法弄明白@interface@property这些工具总要知道是干嘛的怎么用基础库 每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。 从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以, 要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。 iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。 重要的是,放眼全球也的确找不到第二个如苹果iOS平台这样健壮、完整、先进而且为开发者带来真实收益的开发平台来。 众多研发人员积极参与到iOS平台的开发中来也就不足为奇了。 在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解 首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书 因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。 因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。 在此,某不才愿将安装成功的Mac OS X系统的vmware虚拟机向有志学习iOS开发的各位学友们免费开放出来,经测试,可以在WindowsXP/Win7系统上完美运行,即便你的机器只有2GB内存。 在此,某不才愿将安装成功的Mac OS X系统的vmware虚拟机向有志学习iOS开发的各位学友们免费开放出来,经测试,可以在WindowsXP/Win7系统上完美运行,即便你的机器只有2GB内存。 培训的时候很痛苦,每天要待12个小时,上午讲课,下午和晚自习解决作业,看文档,学习的时候感觉就是资料太少,而且看着资料也不明所以,非常痛苦, down下code4app网站的每个分类的代码挨着看 AD: iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。 同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。 开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦 最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。
页:
[1]