2012-07-20 16 views
3

在標題中我使用了Objective C,但是這個問題對其他OOP語言也是可行的,我的問題是這樣的:下面哪個聲明(樣本)更有效?當聲明Objective C對象時效率更高

1)

NSString  *[email protected]"string_literal_for_URL"; 
NSURL   *url   = [NSURL urlWithString:urlString]; 
NSURLRequest *request  = [NSURLRequest requestWithURL:url     cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
               timeoutInterval:40]; 
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:requestFromLogin 
                   delegate:self]; 

2)

NSURLRequest *requestFromLogin = [NSURLRequest requestWithURL:[NSURL URLWithString[NSString stringWithFormat:@"http://%@:%@/ipad/login.php?username=%@&password=%@",server.text,port.text,username.text,password.text]] 
                cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
               timeoutInterval:40]; 

[[NSURLConnection alloc] initWithRequest:requestFromLogin delegate:self]; 

注:據我記得從CS193p Video Lectures的iOS好與延遲實例(據我明白,第一樣品是更好)但我不確定..任何人都可以請在OOP的角度給予答案..在此先感謝

+1

這只是我的看法。大部分時間我都會使用示例1,因爲它更易於閱讀。如果您嘗試優化Web服務下載,則此問題不會以任何可衡量的方式提高性能。坦率地說,你過度思考。嘗試http://programmers.stackexchange.com/來獲取這些問題。 – scord 2012-07-20 14:54:33

+1

這基本上不會在性能上產生任何差異。 – Taum 2012-07-20 15:46:35

+0

@ scordova88好評,也可能是回答 – ilhnctn 2012-07-20 18:26:17

回答

3

當使用ARC編譯代碼並關閉優化時,會有細微的差別:第一個示例會在url對象上增加或減少一個額外時間的引用計數。然而,當開啓優化時,編譯器應該能夠發現在調用NSURLRequest的初始化程序之後,url變量沒有被使用,並對其進行優化。

2

功能上,這兩個例子都非常坦率地相同。唯一真正的區別在於,在第一個示例中,您可以進一步重用urlString,url等對象,因爲您可以訪問它們的指針。

+0

,但是,例如,他們中的一個不會從內存中獲取太多的區域或者這樣的一些差異。我還不確定 – ilhnctn 2012-07-20 14:36:53

+1

它更容易閱讀,因此更容易檢查是否正確。 – trojanfoe 2012-07-20 14:38:21

+0

但是不會讓CPU感到厭倦,還是需要太多內存?(我的意思是第一個) – ilhnctn 2012-07-20 14:40:32