目标c(构建iphone应用程序)真的很新,我正在试图弄清楚如何正确理解调用方法的工作原理(与我一直在使用的最新语言c#相比)
我有这个实现
@interface User : NSObject{
}
@property NSInteger Id;
@property NSString *email, *password;
-(BOOL)isValid;
@end
@implementation User
-(BOOL)isValid{
NSString *password = self.validateString:self.password;
NSString *email = self.email;
if(validUser){
return YES;
}else{
return NO;
}
}
编辑:如果不清楚,那么这是我试图打电话的方法。
-(NSString *)validateString:(NSString *)string{
// process the string
return @"";
}
基本上我正试图在我的视图中创建一个实例,只需点击一下这样的按钮:
- (IBAction)btnSubmit:(id)sender {
// get values of email and password
// do an isvalid to check with web service.
User *user = [[User alloc] init];
user.email = @"email@email.com";
user.rawPassword = @"pass";
if(user.isValid){
// go to next page
}
else{
// else refresh current page
}
}
是在点击时创建实例,然后将值传递给实例内的处理是一个好习惯吗?
谢谢!
答案 0 :(得分:1)
无需在那里创建自己的对象。您可以使用当前对象执行此操作:
- (IBAction)btnSubmit:(id)sender
{
self.email = @"email@email.com";
self.rawPassword = @"pass";
if(self.isValid)
{
// go to next page
}
else
{
// else refresh current page
}
}
您可以使用self
关键字在其范围内引用同一对象。它类似于 C ++
this
关键字
答案 1 :(得分:0)
我不确定您要在对象中调用哪些方法,但要调用当前对象中使用self
的方法。
即
[self runSomeFunction];
答案 2 :(得分:0)
使用
注意: - 如果您在同一个类中创建一个按钮操作,则无需创建相同类的实例,您可以使用self
- (IBAction)btnSubmit:(id)sender {
// get values of email and password
// do an isvalid to check with web service.
User *user = [[User alloc] init];//not need if its same user class
user.email = @"email@email.com";//self.email=@"email@email.com"; if same user class
user.rawPassword = @"pass";//self.rawPassword=@"pass"; if same user class
if([self isValid]){//made a change here as in objective c its a syntax to call a method not with "."
// go to next page
}
else{
// else refresh current page
}
}
答案 3 :(得分:0)
这取决于你是否真的需要分配一个我们不能说的新实例,因为这取决于你的业务逻辑。
如果您要使用new在c ++中创建一个新实例,那么是,请分配/初始化一个新实例并使用它。
如果您在c ++中引用this
,正如您的问题标题所示,那么您可以使用与self
完全对应的this
。 self.isValid
和[self isValid]
是等价的。
这是例如方法。在类方法中self
将引用类,而不是实例