RAC庫的導(dǎo)入教程_第1頁
RAC庫的導(dǎo)入教程_第2頁
RAC庫的導(dǎo)入教程_第3頁
RAC庫的導(dǎo)入教程_第4頁
RAC庫的導(dǎo)入教程_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Now to study;步驟0 安裝系統(tǒng)需要的包 # For Mac # 先安裝 Xcode( 開發(fā)工具,它將幫你安裝好 Unix 環(huán)境需要的開發(fā)包 步驟1 安裝 RVM RVM 是干什么的這里就不解釋了,后面你將會(huì)慢慢搞明白。$ curl -L https:/get.rvm.io | bash -s stable期間可能會(huì)問你sudo管理員密碼,以及自動(dòng)通過homebrew安裝依賴包,等待一段時(shí)間后就可以成功安裝好 RVM。然后,載入 RVM 環(huán)境(新開 Termal 就不用這么做了,會(huì)自動(dòng)重新載入的)$ source /.rvm/scripts/rvm檢查一下是否安裝

2、正確 $ rvm -v rvm 1.22.17 (stable) by Wayne E. Seguin <wayneeseguin>, Michal Papis <mpapis> https:/rvm.io/步驟2 用 RVM 安裝 Ruby 環(huán)境  $ rvm install 2.0.0同樣繼續(xù)等待漫長(zhǎng)的下載,編譯過程,完成以后,Ruby, Ruby Gems 就安裝好了。步驟3 設(shè)置 Ruby 版本 RVM 裝好以后,需要執(zhí)行下面的命令將指定版本的 Ruby 設(shè)置為系統(tǒng)默認(rèn)版本$ rvm 2.0.0 -default同樣,也可以用其他版

3、本號(hào),前提是你有用 rvm install 安裝過那個(gè)版本這個(gè)時(shí)候你可以測(cè)試是否正確$ ruby -v ruby 2.0.0p247 (2013-06-27 revision 41674) x86_64-darwin13.0.0 $ gem -v 2.1.6這有可能是因?yàn)镽uby的默認(rèn)源使用的是,國內(nèi)訪問這個(gè)網(wǎng)址有時(shí)候會(huì)有問題,網(wǎng)上的一種解決方案是將遠(yuǎn)替換成淘寶的,替換方式如下: $gem source -r / $ gem source -a  要想驗(yàn)證是否替換成功了,可以執(zhí)

4、行:$ gem sources -l  正常的輸出結(jié)果:CURRENT SOURCES/到這里就已經(jīng)把Ruby環(huán)境成功的安裝到了Mac OS X上,接下來就可以進(jìn)行相應(yīng)的開發(fā)使用了。如何下載和安裝CocoaPods?假如你在本地已經(jīng)安裝好Ruby環(huán)境,那么下載和安裝CocoaPods將十分簡(jiǎn)單,只需要一行命令。在Terminator(也就是終端)中輸入以下命令(注意,本文所有命令都是在終端中輸入并運(yùn)行的。什么,你不知道什么是終端?那請(qǐng)小編吃飯,小編告訴你):sudo gem install cocoap

5、ods如何使用CocoaPods?為了確定類庫(你要添加的類庫)是否支持CocoaPods,可以用CocoaPods的搜索功能驗(yàn)證一下。在終端中輸入:$ pod search AFNetworking在終端中進(jìn)入(cd命令)你項(xiàng)目所在目錄,然后在當(dāng)前目錄下,利用vim創(chuàng)建Podfile,運(yùn)行:$ vim Podfile 然后在Podfile文件中輸入以下文字:platform :ios, '7.0' pod "AFNetworking", "> 2.0" 注意,這段文字不是小編憑空生成的,可以在AFNetworking的github

6、頁面找到。這兩句文字的意思是,當(dāng)前AFNetworking支持的iOS最高版本是iOS 7.0, 要下載的AFNetworking版本是2.0。然后保存退出。vim環(huán)境下,保存退出命令是::wq 這時(shí)候,你會(huì)發(fā)現(xiàn)你的項(xiàng)目目錄中,出現(xiàn)一個(gè)名字為Podfile的文件,而且文件內(nèi)容就是你剛剛輸入的內(nèi)容。注意,Podfile文件應(yīng)該和你的工程文件.xcodeproj在同一個(gè)目錄下。這時(shí)候,你就可以利用CocoPods下載AFNetworking類庫了。還是在終端中的當(dāng)前項(xiàng)目目錄下,運(yùn)行以下命令:$ pod install 因?yàn)槭窃谀愕捻?xiàng)目中導(dǎo)入AFNetworking,這就是為什么這個(gè)命令需要你進(jìn)入你

7、的項(xiàng)目所在目錄中運(yùn)行。運(yùn)行上述命令之后,小編的終端出現(xiàn)以下信息:EricmatoMacBook-Pro:CocoaPodsDemo ericwang$ pod install Analyzing dependencies Downloading dependencies Installing AFNetworking (2.0.2) Generating Pods project Integrating client project ! From now on use CocoaPodsDemo.xcworkspace. 注意最后一句話,意思是:以后打開項(xiàng)目就用 CocoaPodsDemo.x

8、cworkspace 打開,而不是之前的.xcodeproj文件。你也許會(huì)郁悶,為什么會(huì)出現(xiàn).xcodeproj文件呢。這正是你剛剛運(yùn)行$ pod install命令產(chǎn)生的新文件。除了這個(gè)文件,你會(huì)發(fā)現(xiàn)還多了另外一個(gè)文件“Podfile.lock”和一個(gè)文件夾“Pods”。 點(diǎn)擊 CocoaPodsDemo.xcworkspace 打開之后工程之后,項(xiàng)目Xcode目錄結(jié)構(gòu)如下圖:你會(huì)驚喜地發(fā)現(xiàn),AFNetwoking已經(jīng)成功導(dǎo)入項(xiàng)目了(紅框部分)!現(xiàn)在,你就可以開始使用AFNetworking.h啦??梢陨晕y(cè)試一下,在你的項(xiàng)目任意代碼文件中輸入:#import <AFNetworkin

9、g.h> 或者 #import "AFNetworking.h" 然后編譯,看看是否出錯(cuò)。如果你嚴(yán)格按照小編上述的步驟來,是不可能出錯(cuò)的啦。至此,CocoPods的第一個(gè)應(yīng)用場(chǎng)景講述完畢。別看小編寫了這么多,其實(shí)過程是十分簡(jiǎn)單的??偨Y(jié)一下就是:1. 先在項(xiàng)目中創(chuàng)建Podfile,Podfile的內(nèi)容是你想導(dǎo)入的類庫。一般類庫的原作者會(huì)告訴你導(dǎo)入該類庫應(yīng)該如何寫Podfile;2. 運(yùn)行命令:$ pod install.下面,小編繼續(xù)講述第二種使用場(chǎng)景。場(chǎng)景2:如何正確編譯運(yùn)行一個(gè)包含CocoPods類庫的項(xiàng)目你也許曾經(jīng)遇到過(特別是新手iOS開發(fā)者)這種情況,好不容易

10、在GitHub上找到一份代碼符合自己想需求,興沖沖下載下來,一編譯,傻眼了,發(fā)現(xiàn)有各種各樣錯(cuò)誤。一看,原來是缺失了各種其他第三方類庫。這時(shí)候莫慌,你再仔細(xì)一看,會(huì)發(fā)現(xiàn)你下載的代碼包含了Podfile。沒錯(cuò),這意味著你可以用CocoaPods很方便下載所需要的類庫。下面,小編以代碼 UAAppReviewManager 為例來說明如何正確編譯運(yùn)行一個(gè)包含CocoPods類庫的項(xiàng)目。UAAppReviewManager是一個(gè)能夠讓你方便地將提醒用戶評(píng)分的功能加入你的應(yīng)用中。當(dāng)你去UAAppReviewManager的GitHub地址下載這份代碼之后,打開Example工程(UA

11、AppReviewManagerExample),編譯,你會(huì)發(fā)現(xiàn)Xcode報(bào)告一大堆錯(cuò)誤,基本都是說你編譯的這份代碼找不到某某頭文件,這就意味著你要成功編譯UAAppReviewManager的Example代碼,必須先導(dǎo)入一些第三方類庫。同時(shí)你會(huì)發(fā)現(xiàn)在UAAppReviewManagerExample文件夾下面有三個(gè)跟CocosPods相關(guān)的文件(文件夾):Podfile,Podfile.lock和Pods,如下圖:用這時(shí)候,打開終端,進(jìn)入U(xiǎn)AAppReviewManagerExample所在的目錄,也就是和Podfile在同一目錄下,和場(chǎng)景1一樣,輸入以下命令(由于已經(jīng)有Podfile,所

12、以不需要再創(chuàng)建Podfile):$ pod update 過幾秒(也許需要十幾秒,取決于你的網(wǎng)絡(luò)狀況)之后,終端出現(xiàn):Analyzing dependencies Fetching podspec for UAAppReviewManager from ./ Downloading dependencies Installing UAAppReviewManager (0.1.6) Generating Pods project Integrating client project ! From now on use UAAppReviewManagerExample.xcworkspace.

13、 這時(shí)候,再回到UAAppReviewManagerExample文件夾看一看,會(huì)看到多了一個(gè)文件UAAppReviewManagerExample.xcworkspace:根據(jù)終端的信息提示,你以后就需用新產(chǎn)生的UAAppReviewManagerExample.xcworkspace來運(yùn)行這個(gè)Example代碼了。打開UAAppReviewManagerExample.xcworkspace,編譯運(yùn)行,成功!如下圖:注意,這里有個(gè)小問題,如果剛剛你不是輸入$ pod update,而是輸入$ pod install,會(huì)發(fā)現(xiàn)類庫導(dǎo)入不成功,并且終端出現(xiàn)下面提示:! Required vers

14、ion (UAAppReviewManager (from ./) not found for UAAppReviewManager. Available versions: 0.1.6 這里的意思大概是Podfile文件過期,類庫有升級(jí),但是Podfile沒有更改。$ pod install只會(huì)按照Podfile的要求來請(qǐng)求類庫,如果類庫版本號(hào)有變化,那么將獲取失敗。但是 $ pod update會(huì)更新所有的類庫,獲取最新版本的類庫。而且你會(huì)發(fā)現(xiàn),如果用了 $ pod update,再用 $ pod install 就成功了。那你也許會(huì)問,什么時(shí)候用&

15、#160;$ pod install,什么時(shí)候用 $ pod update 呢,我又不知道類庫有沒有新版本。好吧,那你每次直接用 $ pod update 算了。或者先用 $ pod install,如果不行,再用 $ pod update。好了,小編就啰嗦到這里吧。上述都只是CocoaPods的最基本用法。要繼續(xù)研究CocoaPods其他高級(jí)用法,請(qǐng)點(diǎn)擊這里CocoaPods Wiki。開始動(dòng)手因?yàn)槲抑鞍惭b了 CocoaPods ,所以我這次寫的ReactiveCocoaDemo 是基于CocoaPods的.如

16、果沒有安裝的可以童鞋,可以直接從github上下載 ReactiveCocoa前期工作:1.打開xcode 創(chuàng)建一個(gè)工程,我命名的工程名為ReactiveCocoaDemo,2.終端到工程路徑下cd ReactiveCocoaDemo/ pod search ReactiveCocoa3.配置依賴文件vi Podfile platform :ios,'5.0' pod 'ReactiveCocoa' wq4.下載文件 pod install /update5:打開“Build Phases” 選中相應(yīng)的target, 添加 RAC 到 “Link Bi

17、nary With Libraries”.加上libReactiveCocoa-iOS.a如下圖6:在Header Search Paths 中添加$(BUILD_ROOT)/./IntermediateBuildFilesPath/UninstalledProducts/include"7:在 “Other Linker Flags” 添加 -ObjC8:在ReactiveCocoaDemo-Prefix.pch 將RAC的頭文件加進(jìn)去#import "ReactiveCocoa.h"ReactiveCocoa和響應(yīng)式編程在說ReactiveCocoa之前,先要

18、介紹一下FRP(Functional Reactive Programming,響應(yīng)式編程),在維基百科中有這樣一個(gè)例子介紹:在命令式編程環(huán)境中,a = b + c 表示將表達(dá)式的結(jié)果賦給a,而之后改變b或c的值不會(huì)影響a。但在響應(yīng)式編程中,a的值會(huì)隨著b或c的更新而更新。Excel就是響應(yīng)式編程的一個(gè)例子。單元格可以包含字面值或類似”=B1+C1的公式,而包含公式的單元格的值會(huì)依據(jù)其他單元格的值的變化而變化 。而ReactiveCocoa簡(jiǎn)稱RAC,就是基于響應(yīng)式編程思想的Objective-C實(shí)踐,它是Github的一個(gè)開源項(xiàng)目,你可以在這里找到它。關(guān)于FRP和ReactiveCocoa可

19、以去看leezhong的這篇blog,圖文并茂,講的很好。ReactiveCocoa框架概覽先來看一下leezhong再博文中提到的比喻,讓你對(duì)有個(gè)ReactiveCocoa很好的理解:可以把信號(hào)想象成水龍頭,只不過里面不是水,而是玻璃球(value),直徑跟水管的內(nèi)徑一樣,這樣就能保證玻璃球是依次排列,不會(huì)出現(xiàn)并排的情況(數(shù)據(jù)都是線性處理的,不會(huì)出現(xiàn)并發(fā)情況)。水龍頭的開關(guān)默認(rèn)是關(guān)的,除非有了接收方(subscriber),才會(huì)打開。這樣只要有新的玻璃球進(jìn)來,就會(huì)自動(dòng)傳送給接收方??梢栽谒堫^上加一個(gè)過濾嘴(filter),不符合的不讓通過,也可以加一個(gè)改動(dòng)裝置,把球改變成符合自己的需求(m

20、ap)。也可以把多個(gè)水龍頭合并成一個(gè)新的水龍頭(combineLatest:reduce:),這樣只要其中的一個(gè)水龍頭有玻璃球出來,這個(gè)新合并的水龍頭就會(huì)得到這個(gè)球。下面我來逐一介紹ReactiveCocoa框架的每個(gè)組件StreamsStreams 表現(xiàn)為RACStream類,可以看做是水管里面流動(dòng)的一系列玻璃球,它們有順序的依次通過,在第一個(gè)玻璃球沒有到達(dá)之前,你沒法獲得第二個(gè)玻璃球。RACStream描述的就是這種線性流動(dòng)玻璃球的形態(tài),比較抽象,它本身的使用意義并不很大,一般會(huì)以signals或者sequences等這些更高層次的表現(xiàn)形態(tài)代替。SignalsSignals

21、60;表現(xiàn)為RACSignal類,就是前面提到水龍頭,ReactiveCocoa的核心概念就是Signal,它一般表示未來要到達(dá)的值,想象玻璃球一個(gè)個(gè)從水龍頭里出來,只有了接收方(subscriber)才能獲取到這些玻璃球(value)。Signal會(huì)發(fā)送下面三種事件給它的接受方(subscriber),想象成水龍頭有個(gè)指示燈來匯報(bào)它的工作狀態(tài),接受方通過-subscribeNext:error:completed:對(duì)不同事件作出相應(yīng)反應(yīng)· next 從水龍頭里流出的新玻璃球(value)· error 獲取新的玻璃球發(fā)生了錯(cuò)誤,一般要發(fā)送一個(gè)NSErr

22、or對(duì)象,表明哪里錯(cuò)了· completed 全部玻璃球已經(jīng)順利抵達(dá),沒有更多的玻璃球加入了一個(gè)生命周期的Signal可以發(fā)送任意多個(gè)“next”事件,和一個(gè)“error”或者“completed”事件(當(dāng)然“error”和“completed”只可能出現(xiàn)一種)Subjectssubjects 表現(xiàn)為RACSubject類,可以認(rèn)為是“可變的(mutable)”信號(hào)/自定義信號(hào),它是嫁接非RAC代碼到Signals世界的橋梁,很有用。嗯。 這樣講還是很抽象,舉個(gè)例子吧: 123RACSubject *letters = RACSubject subject;RAC

23、Signal *signal = letters sendNext:"a" 可以看到"a"只是一個(gè)NSString對(duì)象,要想在水管里順利流動(dòng),就要借RACSubject的力。Commandscommand 表現(xiàn)為RACCommand類,偷個(gè)懶直接舉個(gè)例子吧,比如一個(gè)簡(jiǎn)單的注冊(cè)界面: 123456789101112131415161718192021     RACSignal *formValid = RACSignal       &

24、#160; combineLatest:             self.userNameField.rac_textSignal,             self.emailField.rac_textSignal,            &#

25、160;     reduce:(NSString *userName, NSString *email)             return (userName.length &gt; 0                    

26、 &amp;&amp; email.length &gt; 0);               RACCommand *createAccountCommand = RACCommand commandWithCanExecuteSignal:formValid;    RACSignal *networkResults = createAccountCommand      

27、60; addSignalBlock:RACSignal *(id value)            /. 網(wǎng)絡(luò)交互代碼               switchToLatest        deliverOn:RACScheduler mainThreadScheduler;     

28、; / 綁定創(chuàng)建按鈕的 UI state 和點(diǎn)擊事件     self.createButton rac_signalForControlEvents:UIControlEventTouchUpInside executeCommand:createAccountCommand;   Sequencessequence 表現(xiàn)為RACSequence類,可以簡(jiǎn)單看做是RAC世界的NSArray,RAC增加了-rac_sequence方法,可以使諸如NSArray這些集合類(collection classes)直接轉(zhuǎn)換為RACSeque

29、nce來使用。Schedulersscheduler 表現(xiàn)為RACScheduler類,類似于GCD,but schedulers support cancellationbut schedulers support cancellation, and always execute serially.ReactiveCocoa的簡(jiǎn)單使用實(shí)踐出真知,下面就舉一些簡(jiǎn)單的例子,一起看看RAC的使用Subscription接收 -subscribeNext: -subscribeError: -subscribeCompleted: 1234567RACSign

30、al *letters = "A B C D E F G H I" componentsSeparatedByString:" ".rac_sequence.signal; / 依次輸出 A B C Dletters subscribeNext:(NSString *x)     NSLog("%", x); Injecting effects注入效果 -doNext: -doError: -doCompleted:,看下面注釋應(yīng)該就明白了: 1

31、234567891011121314151617181920 _block unsigned subscriptions = 0;   RACSignal *loggingSignal = RACSignal createSignal: RACDisposable * (id&lt;RACSubscriber&gt; subscriber)     subscriptions+;     subscriber sendCompleted;     r

32、eturn nil; ;   / 不會(huì)輸出任何東西 loggingSignal = loggingSignal doCompleted:     NSLog("about to complete subscription %u", subscriptions); ;   / 輸出: / about to complete subscription 1 / subscription 1 loggingSignal subscribeCompleted:     NSLog(&q

33、uot;subscription %u", subscriptions); ;   Mapping-map: 映射,可以看做對(duì)玻璃球的變換、重新組裝 1234567RACSequence *letters = "A B C D E F G H I" componentsSeparatedByString:" ".rac_sequence; / Contains: AA BB CC DD EE FF GG HH IIRACSequence *mapped = letters map:(NSString *value)

34、     return value stringByAppendingString:value; Filtering-filter: 過濾,不符合要求的玻璃球不允許通過 1234567 RACSequence *numbers = "1 2 3 4 5 6 7 8 9" componentsSeparatedByString:" ".rac_sequence;   / Contains: 2 4 6 8 RACSequence *filtered = numbers filter: B

35、OOL (NSString *value)     return (Value % 2) = 0; ;   Concatenating-concat: 把一個(gè)水管拼接到另一個(gè)水管之后 123456RACSequence *letters = "A B C D E F G H I" componentsSeparatedByString:" ".rac_sequence;RACSequence *numbers = "1 2 3 4 5 6 7 8 9" co

36、mponentsSeparatedByString:" ".rac_sequence; / Contains: A B C D E F G H I 1 2 3 4 5 6 7 8 9RACSequence *concatenated = letters concat:numbers; Flattening-flatten:Sequences are concatenated 1234567 RACSequence *letters = "A B C D E F G H I" componentsSeparatedByString:&q

37、uot; ".rac_sequence; RACSequence *numbers = "1 2 3 4 5 6 7 8 9" componentsSeparatedByString:" ".rac_sequence; RACSequence *sequenceOfSequences = letters, numbers .rac_sequence;   / Contains: A B C D E F G H I 1 2 3 4 5 6 7 8 9 RACSequence *flattened = sequenceOfSequence

38、s flatten;   Signals are merged (merge可以理解成把幾個(gè)水管的龍頭合并成一個(gè),哪個(gè)水管中的玻璃球哪個(gè)先到先吐哪個(gè)玻璃球) 12345678910111213141516171819202122RACSubject *letters = RACSubject subject;RACSubject *numbers = RACSubject subject;RACSignal *signalOfSignals = RACSignal createSignal: RACDisposable * (id&lt;RACSubscriber&g

39、t; subscriber)     subscriber sendNext:letters;    subscriber sendNext:numbers;    subscriber sendCompleted;    return nil; RACSignal *flattened = signalOfSignals flatten; / Outputs: A 1 B C 2flattened subscrib

40、eNext:(NSString *x)     NSLog("%", x); letters sendNext:"A"numbers sendNext:"1"letters sendNext:"B"letters sendNext:"C"numbers sendNext:"2" Mapping and flattening-flattenMap: 先 map 再 flatten 12345678910111

41、2131415161718192021222324252627282930 RACSequence *numbers = "1 2 3 4 5 6 7 8 9" componentsSeparatedByString:" ".rac_sequence;   / Contains: 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 RACSequence *extended = numbers flattenMap:(NSString *num)     return num, num

42、 .rac_sequence; ;   / Contains: 1_ 3_ 5_ 7_ 9_ RACSequence *edited = numbers flattenMap:(NSString *num)     if (Value % 2 = 0)         return RACSequence empty;      else       &

43、#160; NSString *newNum = num stringByAppendingString:"_"         return RACSequence return:newNum;      ;         RACSignal *letters = "A B C D E F G H I" componentsSeparatedByString:" "

44、;.rac_sequence.signal;   letters     flattenMap:(NSString *letter)         return database saveEntriesForLetter:letter;          subscribeCompleted:        

45、0;NSLog("All database entries saved successfully.");        Sequencing-then: 12345678910111213RACSignal *letters = "A B C D E F G H I" componentsSeparatedByString:" ".rac_sequence.signal; / 新水龍頭只包含: 1 2 3 4 5 6 7 8 9/ 但當(dāng)有接收時(shí),仍會(huì)執(zhí)行舊水龍頭doNext的

46、內(nèi)容,所以也會(huì)輸出 A B C D E F G H IRACSignal *sequenced = letters    doNext:(NSString *letter)         NSLog("%", letter);        then:        return "1

47、2 3 4 5 6 7 8 9" componentsSeparatedByString:" ".rac_sequence.signal;     Merging+merge: 前面在flatten中提到的水龍頭的合并 123456789101112131415 RACSubject *letters = RACSubject subject; RACSubject *numbers = RACSubject subject; RACSignal *merged = RACSignal merge: le

48、tters, numbers ;   / Outputs: A 1 B C 2 merged subscribeNext:(NSString *x)     NSLog("%", x); ;   letters sendNext:"A" numbers sendNext:"1" letters sendNext:"B" letters sendNext:"C" numbers sendNext:"2"  

49、Combining latest values+combineLatest: 任何時(shí)刻取每個(gè)水龍頭吐出的最新的那個(gè)玻璃球 1234567891011121314151617181920RACSubject *letters = RACSubject subject;RACSubject *numbers = RACSubject subject;RACSignal *combined = RACSignal    combineLatest: letters, numbers     reduce:(NSString *letter, NSString *number)         return letter stringByAppend

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論