3

タイトルではObjectiveCを使用しましたが、この質問は他のOOP言語でも実行可能です。私の質問はこれです:以下の宣言(サンプル)のどれがより効果的ですか?

1)

NSString        *urlString=@"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の観点から答えてください。 。 前もって感謝します

4

2 に答える 2

3

コードがARCでコンパイルされ、最適化がオフになっている場合は、わずかな違いがあります。最初の例では、urlオブジェクトの参照カウントを1回インクリメントおよびデクリメントします。ただし、最適化がオンになっている場合、コンパイラーは、url変数がの初期化子の呼び出し以外に使用されていないことを認識し、NSURLRequestそれを最適化できる必要があります。

于 2012-07-20T14:51:32.927 に答える
2

機能的には、両方の例は率直に言って同じです。ここでの唯一の本当の違いは、最初の例では、ポインターにアクセスできるので、urlString、urlなどのオブジェクトをさらに再利用できることです。

于 2012-07-20T14:34:45.173 に答える