【发布时间】:2013-01-19 10:25:48
【问题描述】:
我在下面有一个自定义类:
#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。我哪里弄错了?
【问题讨论】:
-
通常您想将
NSString属性声明为copy。 -
我将使用
copy而不是assign是这样吗? -
是的 - 这是推荐的
-
您的错误是您将分配用于目标 c 对象。这必须使用复制或强保留。您使用 assign 和 assign 只是将属性分配给分配后立即释放的变量。所以,如果你使用 strong、copy、retain,这应该可以正常工作。
-
namesFix.fixedName 正在访问该属性。这可以。您没有做的是将值分配给属性,而不是保留 IVAR。您应该 a) 在方法说明中将 self.fixedName 设置为 @"Bar" 或 b) 在该对象之外调用该方法时,分配一个指针以获取该方法的结果(因为现在,您有一个 return返回你想要的值但不返回任何东西的值
标签: objective-c xcode nsstring null return