Iphone 在函数之间传递变量

Iphone 在函数之间传递变量,iphone,objective-c,ipad,Iphone,Objective C,Ipad,我只是在学习Objective-C,有一个非常基本的问题。 这是我创建的一个函数,它将简单地保存来自一些用户输入的变量 - (void)standardDatabaseWithName:(NSString*)name host:(NSString*)host username:(NSString*)username password:(NS

我只是在学习Objective-C,有一个非常基本的问题。 这是我创建的一个函数,它将简单地保存来自一些用户输入的变量

- (void)standardDatabaseWithName:(NSString*)name 
                            host:(NSString*)host 
                        username:(NSString*)username 
                        password:(NSString*)password
                        database:(NSString*)database
                            port:(NSInteger*)port {

  NSString *myName = name;
  NSString *myHost = host;
  NSString *myUsername = username;
  NSString *myPassword = password;
  NSString *myDatabase = database;
  NSInteger *myPort = port;
}
下面是一个单独的函数,我想用这些信息创建一个新的var,从那里使用它就是我所需要的

- (void)insertStandardConnection {
    NSString name = [NewDbModalView standardDatabaseWithName:myName];
    NSString host = [NewDbModalView standardDatabaseWithName:myHost]; 
}

所以这次尝试对我不起作用。有什么建议吗?此时,我一直在挠头。

我建议创建一个对象来保存所有信息,并在每次调用该方法时传递该对象,您必须提供所有变量:

[NewDbModalView standardDatabaseWithName:myName host:myHost username:aUsername password:aPassword database:aDatabase port:aPort];

因此,当您调用
[NewDbModalView standardDatabaseWithName:myName]
时,该方法不存在。

您在
standardDatabaseWithName:…
中声明的变量是该方法的本地变量。您需要将该数据(副本)存储在对象中。不过,看看您的代码,我想知道您是否正在尝试设置默认值?在这种情况下,您可能希望静态全局变量接受这些值,然后需要
-(void)standardDatabaseWithName:…
成为
+(void)setStandardDatabaseName:(NSString*)name…

在.h文件中,您应该声明属性

    @interface standardDatabaseWithNameObject : NSObject{
    NSString *myName;
    NSString *myHost;
    NSString *myUsername ;
    NSString *myPassword;
    NSString *myDatabase;
    NSInteger *myPort;
    }

    @property (nonatomic, retain) NSString *myName;
    @property (nonatomic, retain) NSString *myHost;
    @property (nonatomic, retain) NSString *myUsername ;
    @property (nonatomic, retain) NSString *myPassword;
    @property (nonatomic, retain) NSString *myDatabase;
    @property (nonatomic, retain) NSInteger *myPort;
etc...
然后,在您的实现中,您需要合成属性,这些属性将可供使用:

@synthesize myName, myHost, myUsername, myPassword, myDatabase, myPort;


- (void)standardDatabaseWithName:(NSString*)name 
                            host:(NSString*)host 
                        username:(NSString*)username 
                        password:(NSString*)password
                        database:(NSString*)database
                            port:(NSInteger*)port {

  myName = name;
  myHost = host;
  myUsername = username;
  myPassword = password;
  myDatabase = database;
  myPort = port;
}

- (void)insertStandardConnection {
    NSString name = myName;
    NSString host = myHost; 
}

- (void) dealloc
{
[myName release];
[myHost release];
[myUsername release];
[myPassword release];
[myDatabase release];
[myPort release];

}

祝你好运

嘿,谢谢,这很有道理。因此,我希望我的方法能起作用的原因是,在某一点上,我需要只针对这些变量中的一个。因此,假设我已经完成了您的建议,并且只需要使用用户名。我如何确定目标呢?您可以创建方法来完成这些任务。因此,如果您只需要更改密码,请使用
-setPassword:
方法。嘿,非常感谢。你说得非常清楚。因此,当传递该金额或信息时。创建一个单独的对象可能总是比较干净的,对吗?所有这些都需要是self.myName等,否则上面的代码将不会遵循保留/释放规则…Shane,根据您需要数据的位置,您应该将其存储在该特定级别。如果只在函数中需要它,那么在函数中声明它。如果在对象中需要它,则将其声明为属性。如果您需要全局声明,那么就全局声明。-bbum也是对的,您希望在某个时候释放变量,以免造成内存泄漏。