我想初始化一个对象。问题是如何正确传递NSString。
目标代码:
#import "ClaseHoja.h"
@implementation ClaseHoja
@synthesize pares;
@synthesize nombre;
-(id)init
{
self=[super init];
if(self){
}
return self;
}
-(id)initWithValues:(NSString*)nom par:(int)par
{
if([super init]){
pares=par;
nombre=nom;
}
return self;
}
当我调用该函数时,我这样做:
NSString *nombre="Hello";
int par=20;
ClaseHoja *ch = [ClaseHoja alloc] initWithValues:nombre par:numPares]];
答案 0 :(得分:1)
我建议:
将遗失的@
添加到@"Hello"
并修复[]
/ alloc
来电中的init
。
如果您正在使用Xcode,我可以让编译器为您合成属性。不需要@synthesize
。但是,如果您在某个其他平台上使用独立的LLVM,则可能需要它,但按照惯例,您可以指定具有前一个_
的ivar。
我将nombre
定义为copy
属性,并明确复制传递给nombre
方法的init
值。您不希望冒险将NSMutableString
传递给您的方法,并在您不知情的情况下无意中进行变异。
我建议将initWithValues:par:
重命名为initWithNombre:pares:
,以消除对正在更新的属性的任何疑问。
您不需要init
没有参数。您可以依赖NSObject
提供的那个。
您通常使用NSInteger
而不是int
。
在自定义init
方法中,您需要确保if ((self = [super init])) { ... }
因此:
// ClaseHoja.h
@import Foundation;
@interface ClaseHora: NSObject
@property (nonatomic, copy) NSString *nombre;
@property (nonatomic) NSInteger pares;
- (id)initWithNombre:(NSString*)nombre pares:(NSInteger)pares;
@end
和
// ClaseHoja.m
#import "ClaseHoja.h"
@implementation ClaseHoja
// If you're using modern Objective-C compiler (such as included with Xcode),
// you don't need these lines, but if you're using, for example stand-alone
// LLVM in Windows, you might have to uncomment the following lines:
//
// @synthesize nombre = _nombre;
// @synthesize pares = _pares;
- (id)initWithNombre:(NSString*)nombre pares:(NSInteger)pares {
if ((self = [super init])) {
_pares = pares;
_nombre = [nombre copy];
}
return self;
}
@end
你可以像这样使用它:
NSString *nombre = @"Hello";
NSInteger pares = 20;
ClaseHoja *ch = [[ClaseHoja alloc] initWithNombre:nombre pares:pares];
答案 1 :(得分:0)
你需要像这样传递。你错过了另一件事@
在字符串前签名。
NSString *nombre = @"Hello"; int par=20;
ClaseHoja *ch = [[ClaseHoja alloc]initWithValues:nombre par:par];