2013-07-23 13 views
5

, benObjective C neden biçim dizesi

inşa aşağıdaki karşılaştı Bunu neden

Herkes açıklayabilir, bu önemli overengineered görünüyor

-(NSString *)StringCheckWithString:(NSString *)string{ 

    NSString *string2 = [NSString stringWithFormat:@"%@", string]; 

    if([string2 length] == 0){ 
     return @"none"; 
    } 
    else { 
     return string2; 
    } 
} 
ben ve neden bu şekilde yapıldığını anlamıyorum (netlik için, neden bu dizinin biçimlendirildiğini anlamıyorum, uzunluk kontrolünü anlıyorum)

+3

Bu 'string' bilinmeyen bir girdi olabilir. Biçim karakterleri içeriyorsa ve onu ham kullanırsanız BAD THINGS olabilir. – thegrinner

+2

@thegrinner 'string' format karakterleri içeriyorsa, 'string2' şimdi de bu karakterleri içeriyor mu? – James

+0

NSString'in NSString GERÇEKTEN bir yönteme geçtiği bir durum etrafında kafamı kaydırmaya çalışıyorum. Bu duruma nasıl ulaşılacağı konusunda belirli bir örneği olan var mı? – Dan

cevap

8

Aktarılan argüman herhangi bir NSMutableString dahil dize alt sınıfı. Bu kod, değişmez bir kopyasını oluşturur. Başka bir deyişle, değiştirilen dizeyi değiştiren başka biri için endişelenmenize gerek kalmadan saklayabilirsiniz.

Bunu yapmanın daha iyi bir yolu olacaktır:

NSString *string2 = [string copy]; 

NSCopying Protocol reference göre:

döndü kopya değişmez dikkate “değişmez vs değişken ” alıcı için geçerli olup olmadığını nesne.

+0

Bu cevabı beğeniyorum.Kullanımın incelenmesinden şüphe etmekteyim, ama istenen bir etki olarak mantıklı geliyor – James

+8

'[string copy]' bana açık görünüyor. – jszumski

+0

@jszumski ile aynı fikirdeyim - eğer bu etkiyle ilgili bir şey yazacak olsaydım, 'copy' kullanırdım. – Jasarien