版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Learn ObjectiveC原文地址譯者前言在網(wǎng)上看到這篇文章覺(jué)得寫的很不錯(cuò),但是貌似沒(méi)有人翻譯成中文,我就大膽翻譯 了。本人做軟件開(kāi)發(fā)6年了,但是大多數(shù)是在Windows平臺(tái)上,最近才在我的機(jī)器上裝 了一個(gè)leopard,在ObjectiveC上也是一個(gè)新手,對(duì)于本文翻譯的是否到位心里還 在打鼓。如果有覺(jué)得翻譯不對(duì)不好的地方,請(qǐng)與我聯(lián)系,我的油箱是:cchenhao at gmail dot com。cc很好J,謝謝大家。ObjectiveCObjectiveC是開(kāi)發(fā)Mac軟件的主要編程語(yǔ)言。如果你了解一些面向?qū)ο蟮幕靖拍詈?C語(yǔ)言,那么會(huì)對(duì)你學(xué)習(xí)ObjectiveC有很多
2、幫助,如果你不了解C,那么建議你先讀一下 C 指南。這篇指南由Scott Stevenson編寫并做圖。方法調(diào)用為了盡快開(kāi)始,讓我們先看一些例子。調(diào)用一個(gè)對(duì)象的方法的基本語(yǔ)法是這樣的:object method;object methodWithInput:input;方法可以有返回值:output = object methodWithOutput;output = object methodWithInputAndOutput:input;你還可以調(diào)用類的方法,這也是創(chuàng)建一個(gè)對(duì)象的辦法。在下面的例子里,我們調(diào)用 了NSSting類的string方法,用來(lái)返回一個(gè)新的NSString類的對(duì)象
3、。id myObject = NSString string;id類型意味著變量myObject可以是任意類型的對(duì)象。所以,當(dāng)你編譯這段代碼時(shí), 它的實(shí)際類型以及它所實(shí)現(xiàn)的方法編譯器是不知道的。在我們的例子里,很顯然對(duì)象的類型是NSString,所以我們可以改變對(duì)象的類型 聲明:NSString* myString = NSString string;現(xiàn)在,這就是一個(gè)NSString類型的變量了,如果我們?cè)谶@個(gè)對(duì)象上調(diào)用NSString類型對(duì)象不支持的方法,編譯器就會(huì)發(fā)出警告。注意:在對(duì)象類型的右面有一個(gè)星號(hào)(*),在Objective-C中,所有的對(duì)象變量 都是指針類型。id類型已經(jīng)被預(yù)定義
4、為指針類型,所以不需要加一個(gè)星號(hào)。嵌套調(diào)用在許多編程語(yǔ)言中,嵌套的方法或函數(shù)調(diào)用像是這樣的:function1(function2();function2的返回值做為輸入?yún)?shù)傳遞給function1。在Objective-C中,嵌套 調(diào)用看上去像是這樣的:NSString stringWithFormat:prefs format;要盡量避免在一行語(yǔ)句中進(jìn)行兩層以上的嵌套,這樣會(huì)使代碼的可讀性降低。多輸入?yún)?shù)的方法一些方法需要多個(gè)輸入?yún)?shù)。在Objective-C中,一個(gè)方法的名字可以被拆分成幾段,在頭文件中,多輸入?yún)?shù)的方法聲明看上去像是這樣的:-(BOOL)writeToFile:(NSS
5、tring *)path atomically:(BOOL)useAuxiliaryFile;你可以這樣調(diào)用這個(gè)方法:BOOL result = myData writeToFile:”/tmp/log.txt”atomically:NO;這些不是命名參數(shù)。在運(yùn)行時(shí)環(huán)境中,該方法的名字實(shí)際上是writeToFile:atomically:訪問(wèn)器在ObjectiveC中,所有的實(shí)例變量默認(rèn)都是私有的,所以,在大多數(shù)情況下,你應(yīng) 該使用訪問(wèn)器來(lái)獲取或設(shè)置這些變量的值。現(xiàn)在有兩種語(yǔ)法。下面的是傳統(tǒng)的1.x語(yǔ)法:photo setCation:”Day at the Beach”;output = p
6、hoto caption;第2行代碼不是直接讀取實(shí)例變量。實(shí)際上它是在調(diào)用名為caption的方法。在Objective-C中,大多數(shù)情況你不用在獲取器(getter)前面添加一個(gè)”get”前綴在任何情況下,在方括號(hào)中代碼都意味著你是在給一個(gè)對(duì)象或者一個(gè)類型發(fā)送一個(gè) 消息(即一個(gè)方法調(diào)用)。點(diǎn)操作符在Mac OS X 10.5中,Objective-C 2.0新增了點(diǎn)操作符的設(shè)置器(setter) 和獲取器(getter):photo.caption = ”Day at the Beach”;output = photo.caption;兩種語(yǔ)法你可以使用任何一種,但是在一個(gè)項(xiàng)目中最好只使用一
7、種。同時(shí),點(diǎn)語(yǔ)法 只能使用在設(shè)置器(setter)和獲取器(getter)上,而不能用于普通方法。創(chuàng)建對(duì)象創(chuàng)建對(duì)象有兩種主要的辦法。第一個(gè)是之前你看到的:NSString* myString = NSString string;這是一種更加方便自然的方式。通過(guò)這種方法,你創(chuàng)建了一個(gè)自動(dòng)釋放 (autoreleased)的對(duì)象,這一點(diǎn)我們會(huì)在后面看到更多的細(xì)節(jié)。盡管如此,在許多 地方,你可能需要通過(guò)手工創(chuàng)建的方式來(lái)創(chuàng)建一個(gè)對(duì)象,如下:NSString* myString = NSString alloc init;這是一個(gè)嵌套的方法調(diào)用。第一個(gè)是NSString類本身的alloc方法調(diào)用。這是一
8、 個(gè)相對(duì)低層的調(diào)用,它的作用是分配內(nèi)存及實(shí)例化一個(gè)對(duì)象。第二個(gè)是調(diào)用新創(chuàng)建對(duì)象的init方法。init方法通常做對(duì)象的初始化設(shè)置工作, 比如創(chuàng)建實(shí)例變量。作為一個(gè)類的使用者,你無(wú)法知道這些方法的實(shí)現(xiàn)細(xì)節(jié)。在某些情況下,你可以使用init方法的另外一種版本,這些版本帶有輸入?yún)?shù):NSNumber* value = NSNumber alloc initWithFloat:1.0;內(nèi)存管理基礎(chǔ)當(dāng)你為Mac OS X編寫應(yīng)用程序時(shí),你可以選擇允許垃圾回收。這意味著如果不是 在特別復(fù)雜的情況下,你不用考慮內(nèi)存管理。然而,你并不會(huì)總是工作在支持垃圾回收的環(huán)境中。這樣的話,你就需要知道一些 基本概念。如果
9、你通過(guò)手工alloc的方式創(chuàng)建一個(gè)對(duì)象,之后你需要release這個(gè)對(duì)象。同樣, 你也不能手工釋放(release)一個(gè)能自動(dòng)釋放(autoreleased)的對(duì)象,因?yàn)檫@將會(huì) 使你的應(yīng)用程序崩潰。以下是兩個(gè)例子:/string1 將被自動(dòng)釋放NSString* string1 = NSString string;/必須在用完后手工釋放NSString* string2 = NSString alloc init; string2 release;在這里,你可以認(rèn)為自動(dòng)釋放對(duì)象會(huì)在當(dāng)前函數(shù)結(jié)束的時(shí)候被自動(dòng)釋放。 關(guān)于內(nèi)存管理要學(xué)的東西很多,但是我們先了解一下其他的概念,這樣我們會(huì)有更多的認(rèn)識(shí)。
10、設(shè)計(jì)類接口在Objective-C的語(yǔ)法中,創(chuàng)建一個(gè)類是非常簡(jiǎn)單的。一個(gè)類通常分為兩部分。類的接口(interface)通常存放在類似ClassName.h的文件中,在這里,我們定義實(shí)例變量和公用(public)方法。類的實(shí)現(xiàn)存放在ClassName.m這樣的文件中,它包含了這些方法的實(shí)際實(shí)現(xiàn)代碼。 它通常還定義了客戶類不能訪問(wèn)的私有(private)方法。一個(gè)接口文件看上去像以下這樣的。這個(gè)類名字叫做Photo,所以接口文件名是Photo.h:#import <Cocoa/Cocoa.h>interface Photo : NSObject NSString* caption;N
11、SString* photographer;end首先,我們導(dǎo)入了Cocoa.h,目的是將Cocoa應(yīng)用程序的基本類添加進(jìn)來(lái)。#import指令會(huì)自動(dòng)防止將同一個(gè)文件導(dǎo)入多次。interface表明這是類Photo的聲明。冒號(hào)后面指定父類(superclass),這里 父類是NSObject。在花括號(hào)里面聲明了兩個(gè)實(shí)例變量:caption和photographer。都是NSString類型,實(shí)例變量可以是任何對(duì)象類型,包括id類型。最后,end符號(hào)結(jié)束類的聲明。添加方法讓我們給實(shí)力變量添加一些獲取器(getter)#import <Cocoa/Cocoa.h>interface P
12、hoto : NSObject NSString* caption; NSString* photographer;- caption;- photographer;end記住,Objective-C語(yǔ)言中通常省略方法的“get”前綴。方法名字前面的單個(gè)減 號(hào)(-)表明該方法是一個(gè)實(shí)例方法。如果方法名字前面是一個(gè)加號(hào)(+),則表明該方法 是一個(gè)類(static)方法。編譯器會(huì)默認(rèn)一個(gè)方法的返回值是一個(gè)id類型的對(duì)象,所有的輸入?yún)?shù)也默認(rèn)是id 類型。上述代碼在技術(shù)上是正確的,但是我們一般不這樣寫,我們需要給這些方法指定 返回值類型。#import <Cocoa/Cocoa.h>in
13、terface Photo : NSObject NSString* caption; NSString* photographer;- (NSString*)caption;- (NSString*)photographer;end現(xiàn)在,我們來(lái)添加設(shè)置器(setter):#import <Cocoa/Cocoa.h>interface Photo : NSObject NSString* caption; NSString* photographer;- (NSString*)caption;- (NSString*)photographer;- (void) setCaptio
14、n: (NSString*)input;- (void) setPhotographer: (NSString*)input;end設(shè)置器不需要有返回值,所以我們指定返回值是void。類實(shí)現(xiàn)現(xiàn)在,我們從獲取器(getter)開(kāi)始,來(lái)創(chuàng)建一個(gè)類的實(shí)現(xiàn)。#import "Photo.h"implementation Photo- (NSString*) caption return caption;- (NSString*) photographer return photographer;end這段代碼以implementation和類的名字開(kāi)始,并且像接口一樣,有一個(gè)end
15、。 所有的方法必須寫在這兩條語(yǔ)句之間。如果你寫過(guò)代碼,就會(huì)覺(jué)得上面的獲取器看上去很熟悉,所以我們還是來(lái)看一看設(shè) 置器,它們需要多一點(diǎn)解釋。- (void) setCaption: (NSString*)inputcaption autorelease;caption = input retain;- (void) setPhotographer: (NSString*)inputphotographer autorelease;photographer = input retain;每一個(gè)設(shè)置器都要處理兩個(gè)變量,第一個(gè)是當(dāng)前引用的對(duì)象,第二個(gè)是新輸入的對(duì)象。在帶有垃圾回收機(jī)制的環(huán)境中,我們可以
16、直接設(shè)置成新的值。- (void) setCaption: (NSString*)inputcaption = input;但是,如果你不能使用垃圾回收,你需要release舊的對(duì)象,并且retain新的對(duì) 象。釋放一個(gè)對(duì)象的引用實(shí)際上有兩種方法:release 和 autorelease。標(biāo)準(zhǔn)的 release會(huì)立刻釋放對(duì)象的引用。autorelease會(huì)等一會(huì)兒才釋放,但是引用實(shí)際上 會(huì)一直存在,直到當(dāng)前方法結(jié)束(除非你添加自定義的代碼來(lái)明確的改變它)。在設(shè)置器里面使用autorelease方法會(huì)更加安全一些,因?yàn)橐淖兊淖兞康男屡f兩 個(gè)值可能指向的是同一個(gè)對(duì)象。而你可能不希望立刻釋放實(shí)際
17、上你要保留的對(duì)象?,F(xiàn)在,這看上去有點(diǎn)讓人迷惑,但是隨著你的不斷學(xué)習(xí),你就會(huì)有更多的認(rèn)識(shí)。所 以,現(xiàn)在不必徹底的理解這些。Init我們可以創(chuàng)建一個(gè)init方法用來(lái)給我們的實(shí)例變量設(shè)置初始化值:- (id) initif ( self = super init )self setCaption:"Default Caption"self setPhotographer:"Default Photographer"return self;這段代碼是完全不需要加以說(shuō)明的,盡管第二行看上去有點(diǎn)不常見(jiàn)。它是一個(gè)單個(gè) 的等號(hào)(=),作用是將super init的結(jié)果賦
18、值給self。這實(shí)際上是要求父類做(父類的)初始化操作。if語(yǔ)句的作用是在嘗試設(shè)置(本對(duì) 象的)缺省值之前驗(yàn)證父類是否初始化成功。Deallocdealloc方法在一個(gè)對(duì)象從內(nèi)存中刪除時(shí)被調(diào)用。通常在這個(gè)方法里面釋放所有對(duì)象 里的實(shí)例變量。 (void) dealloccaption release; photographer release; super dealloc;在前兩行,我們直接調(diào)用了實(shí)例變量的release方法。在這里,我們不需要使用autorelease,因?yàn)闃?biāo)準(zhǔn)的release更快一些。最后一行非常重要,我們發(fā)送了一個(gè)super dealloc消息,要求父類做清理工作。如果我
19、們不做的話,該對(duì)象就不會(huì)被從內(nèi)存中刪除,這就造成了內(nèi)存泄露。當(dāng)啟用垃圾回收機(jī)制時(shí),對(duì)象的dealloc方法不會(huì)被調(diào)用。此時(shí),你可以實(shí)現(xiàn)一個(gè)finalize方法來(lái)代替它。內(nèi)存管理Objective-C的內(nèi)存管理是基于引用計(jì)數(shù)的。你要做的事情只是關(guān)注你的引用,而釋放內(nèi)存的工作實(shí)際上由運(yùn)行環(huán)境完成。在最簡(jiǎn)單的情形中,你分配的(alloc)對(duì)象,或者是保留(retain)在一些地方 的對(duì)象,都需要給他們發(fā)送一個(gè)release消息。這也意味著,如果你使用了一次alloc, 然后又retain了一次,那么你需要release兩次才能釋放該對(duì)象的內(nèi)存。這就是引用計(jì)數(shù)的理論。在實(shí)際應(yīng)用中,通常只有兩個(gè)原因我們
20、才會(huì)創(chuàng)建一個(gè)對(duì)象:1作為一個(gè)實(shí)例變量保留。2在函數(shù)內(nèi)部作為臨時(shí)變量使用。大多數(shù)情況下,一個(gè)實(shí)例變量的設(shè)置器(setter)會(huì)自動(dòng)釋放(autorelease)原來(lái)引用的對(duì)象,同時(shí)保留(retain)新的。你只需要保證在dealloc函數(shù)中釋放(release)了它就行了。那么,我們實(shí)際要做的工作就只有管理函數(shù)內(nèi)部的本地引用了。在這里只有一條規(guī)則:如果過(guò)你通過(guò)alloc或者copy創(chuàng)建了一個(gè)對(duì)象,在函數(shù)結(jié)尾的地方給它發(fā)送一個(gè)release或者autorelease消息就行了。如果你是通過(guò)其它方式創(chuàng)建的對(duì)象,就什么 也別做。下面是第一個(gè)例子,管理實(shí)例變量:- (void) setTotalAmou
21、nt: (NSNumber*)inputtotalAmount autorelease;totalAmount = input retain;- (void) dealloctotalAmount release; super dealloc;下面是另外一個(gè)例子,關(guān)于本地引用。我們只需要釋放通過(guò)alloc創(chuàng)建的對(duì)象就行了:NSNumber* value1 = NSNumber alloc initWithFloat:8.75; NSNumber* value2 = NSNumber numberWithFloat:14.78;/ only release value1, not value2
22、value1 release;下面是一個(gè)組合例子,將一個(gè)本地引用設(shè)置給實(shí)例變量:NSNumber* value1 = NSNumber alloc initWithFloat:8.75; self setTotal:value1;NSNumber* value2 = NSNumber numberWithFloat:14.78; self setTotal:value2;value1 release;注意,不論你是不是把本地引用當(dāng)成實(shí)例變量一樣賦值,管理它們都是完全相同的。 你不必考慮設(shè)置器(setter)是如何實(shí)現(xiàn)的。如果你理解了這些,你就理解了關(guān)于Objective-C內(nèi)存管理中90%你需
23、要知道的內(nèi)容。日志記錄在Objective-C中,將日志信息輸出到控制臺(tái)是非常簡(jiǎn)單的。實(shí)際上NSLog()函數(shù)很像C語(yǔ)言里面的printf()函數(shù),除了要用一個(gè)%符號(hào)代表一個(gè)對(duì)象。NSLog ( "The current date and time is: %", NSDate date );你可以將一個(gè)對(duì)象的信息作為日志在控制臺(tái)輸出。NSLog函數(shù)調(diào)用該對(duì)象的 description方法,并且將這個(gè)方法返回的NSString打印到控制臺(tái)。你可以在你的 類中重寫這個(gè)方法以返回你自定義的字符串。屬性(Properties)前面我們寫了caption和author的訪問(wèn)方法,你
24、可能也注意到了,那些代碼很簡(jiǎn)單,應(yīng)該可以寫成具有更普遍意義的形式。屬性是Objective-C的一個(gè)特性,它允許我們自動(dòng)生成訪問(wèn)器,同時(shí)還有其它方面 的好處。我們用屬性來(lái)改寫一下Photo類。之前的代碼看上去是這樣的:#import <Cocoa/Cocoa.h>interface Photo : NSObject NSString* caption; NSString* photographer;- (NSString*) caption;- (NSString*) photographer;- (void) setCaption: (NSString*)input;- (voi
25、d) setPhotographer: (NSString*)input;end用屬性改寫后的代碼看上去是這樣的:#import <Cocoa/Cocoa.h>interface Photo : NSObject NSString* caption; NSString* photographer;property (retain) NSString* caption;property (retain) NSString* photographer;endproperty是Objective-C語(yǔ)言的一個(gè)指令,通過(guò)它聲明屬性。帶括號(hào) 的”retain”指示設(shè)置器(setter)要保留
26、輸入值,該行后面的是指定屬性的類型以 及名稱。下面我們看看這個(gè)類的實(shí)現(xiàn)部分:#import "Photo.h"implementation Photosynthesize caption;synthesize photographer;- (void) dealloccaption release; photographer release; super dealloc;endsynthesize指令為我們主動(dòng)生成了setter和getter,所以我們必須要做的就 只有實(shí)現(xiàn)dealloc方法了。只有當(dāng)訪問(wèn)器不存在的時(shí)候,synthesize才會(huì)自動(dòng)生成訪問(wèn)器,所以,即使是使
27、 用synthesize聲明了一個(gè)屬性,你仍然可以實(shí)現(xiàn)自定義的getter和setter。編譯 器只會(huì)自動(dòng)生成你沒(méi)有自定義的方法。關(guān)于屬性的聲明還有很多選項(xiàng),但是它們超出了本指南的范圍。在Nil上調(diào)用方法在Objective-C中,nil對(duì)象的作用等同于很多其他語(yǔ)言的NULL指針。不同的地方在于,在nil上調(diào)用方法不會(huì)導(dǎo)致程序崩潰或拋出異常。這種技術(shù)被用在很多地方,但是對(duì)于我們來(lái)講,最主要的就是我們不用在調(diào)用一個(gè)對(duì)象的方法之前檢查該對(duì)象是否為空。如果你調(diào)用了一個(gè)nil對(duì)象的方法并且該方法有 返回值的話,你會(huì)得到一個(gè)nil返回值。我們也可以用它來(lái)稍微改進(jìn)一下我們的dealloc方法:- (voi
28、d) deallocself.caption = nil; self.photographer = nil; super dealloc;可以這樣做是因?yàn)楫?dāng)我們將nil賦值給一個(gè)實(shí)例變量,設(shè)置器(setter)會(huì)釋放舊對(duì) 象并且保留(retain)nil對(duì)象。這種做法對(duì)于dealloc來(lái)說(shuō)更好一些,因?yàn)檫@樣做 避免了讓變量指向一個(gè)隨機(jī)的數(shù)據(jù),而這個(gè)數(shù)據(jù)又恰好是另外一個(gè)對(duì)象。注意,我們?cè)谶@里使用了self.<var>語(yǔ)法,這表示我們使用的是setter,它會(huì)進(jìn) 行內(nèi)存管理。如果我們僅僅是直接設(shè)置值,像下面這樣,那就會(huì)產(chǎn)生內(nèi)存泄露:/ incorrect. causes a memory leak./ use self.caption to go through setter caption = nil;類目(Category)類目是Objective-C中最有用的一個(gè)特性。實(shí)質(zhì)上,類目允許你為一個(gè)已存在的類添加一些方法而不用子類化該類,也不需要你了解該類的實(shí)現(xiàn)細(xì)節(jié)。這是特別有用的,因?yàn)槟憧梢越o一個(gè)內(nèi)建的對(duì)象添加方法。當(dāng)你想在
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東外語(yǔ)外貿(mào)大學(xué)《營(yíng)養(yǎng)生理學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東司法警官職業(yè)學(xué)院《別墅建筑設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東生態(tài)工程職業(yè)學(xué)院《西方經(jīng)濟(jì)學(xué)(下)》2023-2024學(xué)年第一學(xué)期期末試卷
- 七年級(jí)上冊(cè)《6.2.1直線、射線、線段》課件與作業(yè)
- 廣東南華工商職業(yè)學(xué)院《色彩靜物及人物頭像》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東梅州職業(yè)技術(shù)學(xué)院《計(jì)算機(jī)創(chuàng)客訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東茂名健康職業(yè)學(xué)院《半導(dǎo)體器件原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 一年級(jí)數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)1000題匯編
- 2024八年級(jí)地理上冊(cè)第三章自然資源-我們生存和發(fā)展的物質(zhì)基礎(chǔ)學(xué)情評(píng)估晉教版
- 【2021屆備考】2020全國(guó)名校物理試題分類解析匯編(11月第二期)A4-豎直上拋運(yùn)動(dòng)
- 《古蘭》中文譯文版
- 小學(xué)英語(yǔ)不規(guī)則動(dòng)詞表
- VIC模型PPT課件
- AQL2.5抽檢標(biāo)準(zhǔn)
- 宣傳廣告彩頁(yè)制作合同
- 【語(yǔ)法】小學(xué)英語(yǔ)語(yǔ)法大全
- 除濕機(jī)說(shuō)明書
- 征信知識(shí)測(cè)試題及答案
- 理想系列一體化速印機(jī)故障代碼
- 現(xiàn)代電路技術(shù)——故障檢測(cè)D算法
- 檢驗(yàn)科各專業(yè)組上崗輪崗培訓(xùn)考核制度全6頁(yè)
評(píng)論
0/150
提交評(píng)論