0

以下にカスタムクラスがあります。

#import <Foundation/Foundation.h>

@interface NamesFix : NSObject

@property (nonatomic, copy) NSString *fixedName;

- (NSString *)fixName:(NSString *)name;

@end

実装ファイル:

#import "NamesFix.h"

@implementation NamesFix

@synthesize fixedName;

- (NSString *)fixName:(NSString *)name
{
    if ([name isEqualToString:@"Foo"])
    {
        self.fixedName = @"Bar";
    }
    else
    {
        self.fixedName = @"";
    }
    return self.fixedName;
}

次の方法でカスタムクラスにアクセスする場合:

NamesFix *namesFix = [NamesFix alloc] init];
NSString *someString = @"Foo";

[namesFix fixName:someString];

NSLog(@"fixedName: %@", namesFix.fixedName];

fixedNameはを返しますnull。どこで間違えたのですか?

4

1 に答える 1

3

文字列の推奨メモリ管理属性であるプロパティコピーを作成します(代わりにretainを使用できますが、コピーは、可変サブクラスNSMutableStringを渡す他のユーザーから保護し、気付かないうちに変更されます):

@property (nonatomic, copy) NSString *fixedName;

実装では、このプロパティが提供するsetterメソッドを使用します。

self.fixedName = ...

それ以外の

fixedName = ...

編集

return self.fixedStringまた、習慣の問題として使用します。

于 2013-01-19T10:32:29.090 に答える