2
@interface MainView : UIView { 
    NSMutableString *mutableString; 
}
@property (nonatomic, retain) NSMutableString *mutableString;
@end

@implementation MainView
@synthesize mutableString;

-(void) InitFunc {  
    self.mutableString=[[NSMutableString alloc] init];
 }

-(void) AppendFunc:(*NString) alpha { 
    [self.mutableString stringByAppendingString:@"hello"];
    NSLog(@"the appended String is: %@",self.mutableString);
    int len=[self.mutableString length];
}

こんにちは、みなさん、

どこが間違っているのか知りたいだけですか??? . 私はこのコードを試しましたが、「mutableString」は値を追加しません (「len」の値は「0」になり、NSLog は「mutableString」の値を出力しません)。同じ方法ですが、コードが機能しない理由がわかりません。

前もって感謝します

MGD

4

3 に答える 3

5

stringByAppendingString:新しい文字列を作成します。appendString:代わりに使用してください:

[mutableString appendString:@"hello"]

于 2010-11-28T10:21:16.663 に答える
3

1) メソッド名が命名規則に違反しています: 最初は小文字を使用してください。

2)stringByAppendingString結果として新しい文字列を返し、元の文字列を変更しません。[self.mutableString appendString:@"hello"];代わりに使用する必要があります。

3) init メソッドがリークしています。mutableString = [[NSMutableString alloc] init];ドット構文を使用する必要があります。使用しないでください。retainそうしないと ed になります (そして areleaseが欠落します)。

于 2010-11-28T10:23:42.130 に答える
1

なんてこった。はstringByAppendingString文字列を変更せず、新しいものを作成して返します。

// Sets str2 to “hello, world”, does not change str1.
NSMutableString *str1 = [NSMutableString stringWithString:@"hello, "];
NSString *str2 = [str1 stringByAppendingString:@"world"];

変更可能な文字列自体を変更する場合は、次のappendStringメソッドを使用します。

// Does not return anything, changes str1 in place.
[str1 appendString:@"world"];

また、これはリークです:

self.mutableString = [[NSMutableString alloc] init];

これは次のように書くのが最適です。

mutableString = [[NSMutableString alloc] init];

…アクセサをinitandで使用dealloc するのは最善の方法ではないためです。

于 2010-11-28T10:22:51.610 に答える