0

私はこれがより速くなる可能性があることを知っていますが、私はコーディングの経験が何年もないので、難しい方法を学んでいます..

文字列が nsurl に追加されていない場合は、文字列が "" ではないかどうかを確認する関数を作成し、nsurl が nil でないかどうかを確認して可変配列に追加します。

-(void)CheckUrls
{    
self.items = [NSMutableArray array];


NSURL *URL1 ;
NSURL *URL2 ;
NSURL *URL3 ;
NSURL *URL4 ;
NSURL *URL5 ;
NSURL *URL6 ;


NSLog(@" FOTO 1: %@ \n FOTO2 : %@ \n FOTO 3 : %@ \n FOTO 4 : %@ \n FOTO 5: %@ \n FOTO 6: %@ \n",self.searchResult.foto1,self.searchResult.foto2,self.searchResult.foto3,self.searchResult.foto4,self.searchResult.foto5,self.searchResult.foto6);

if (![self.searchResult.foto1 isEqualToString:@""]) {
    URL1 = [NSURL URLWithString:self.searchResult.foto1];

}
if (![self.searchResult.foto2 isEqualToString:@""]) {
    URL2 = [NSURL URLWithString:self.searchResult.foto2];

}
if (![self.searchResult.foto3 isEqualToString:@""]) {
    URL3 = [NSURL URLWithString:self.searchResult.foto3];

}
if (![self.searchResult.foto4 isEqualToString:@""]) {
    URL4 = [NSURL URLWithString:self.searchResult.foto4];

}
if (![self.searchResult.foto5 isEqualToString:@""]) {
    URL5 = [NSURL URLWithString:self.searchResult.foto5];

}
if (![self.searchResult.foto6 isEqualToString:@""]) {
    URL6 = [NSURL URLWithString:self.searchResult.foto6];

}



if (URL1 !=NULL) {
    [items addObject:URL1];
}

if (URL2 !=NULL) {
    [items addObject:URL2];
}
if (URL3 !=NULL) {
    [items addObject:URL3];
}
if (URL4 !=NULL) {
    [items addObject:URL4];
}
if (URL5 !=NULL) {
    [items addObject:URL5];
}
if (URL6 !=NULL) {
    [items addObject:URL6];
}

この機能を最適化できますか?

4

4 に答える 4

4
NSArray* photosToCheck = [NSArray arrayWithObjects:
  self.searchResult.foto1, self.searchResult.foto2, self.searchResult.foto3, self.searchResult.foto4, self.searchResult.foto5, self.searchResult.foto6, nil];

for (NSString* photo in photosToCheck) {
    if (photo.length > 0) {
        NSURL* photoUrl = [NSURL URLWithString:photo];
        [items addObject:photoUrl];
    }
}

foto1ただし、 、 、 ...という名前のプロパティがあると、foto2代わりに配列を使用してデータを保持する必要があることがすぐにわかります。

于 2013-01-11T14:29:06.037 に答える
0

空の文字列と比較することは、文字列の長さがゼロかどうかをテストすることと同じです。CPU 時間の節約にはなりませんが、少なくとも読みやすくなります。また、設定時に URL を配列に保存できるため、後でテストする必要はありません。

if ([self.searchResult.foto1 length] > 0) {
    URL1 = [NSURL URLWithString:self.searchResult.foto1];
    [items addObject:URL1];
}
if ([self.searchResult.foto2 length] > 0) {
    URL2 = [NSURL URLWithString:self.searchResult.foto2];
    [items addObject:URL2];
}
// etc.

実際に etc を使用しない場合はURL1、それらを直接配列に入れることができます。

if ([self.searchResult.foto1 length] > 0) {
    [items addObject:[NSURL URLWithString:self.searchResult.foto1]];
}
// etc.
于 2013-01-11T14:29:11.107 に答える
0

ちょうど 6 枚の写真がある場合は、そのままにしておきます。
それ以外の場合は、Url の配列を使用して、それらをループします。

于 2013-01-11T14:28:49.017 に答える
0

self.searchResults を文字列の NSArray にする

forループを行うには2つの方法があります

for(NSInteger x = 0;x<100;x++)

この場合、x が 99 より大きいか、条件が false になるまでループします。

for(NSObject *key in anArrayOfObjects)

配列内の各オブジェクトをループします

Null チェックは常に良い考えです。(NSString *) は [NSNull null] を型キャストして null NSString にします。

url != (NSString *)[NSNull null]

写真の値が空かnullかはすでにわかっているため、中間のNSURLは必要ありません。そのため、オブジェクトを新しいNSURLとしてアイテムの配列にすぐに入れることができます

[items addObject:[NSURL URLWithString:url]];

最終コード

-(void)CheckUrls
{    
    self.items = [NSMutableArray array];

    for(NSString *url in self.searchResult){
        if( url != (NSString *)[NSNull null] && ![url isEqualToString:@""] ){
            [items addObject:[NSURL URLWithString:url]];
        }
    }
}
于 2013-01-11T14:53:59.937 に答える