Как уже отмечалось в этой теме, у вас есть некоторые проблемы с управлением памятью, возможно, вы не совсем понимаете, каким образом объекты NSO выделяются и сохраняются, вам следует ознакомиться с управлением памятью Objective-C. В то же время есть два подхода, которые вы можете использовать для решения вышеуказанной проблемы.
Вы могли бы хранить свои переменные-члены NSString (string1 & string2) в качестве свойств вашего класса, кроме некоторых других функций, объявляющих их как свойства, предоставляя им методы доступа setter и getter, которые вы будете вызывать вместо method1 и method2. Так что это изменит ваш код, чтобы он выглядел следующим образом в вашем заголовочном файле
@interface MyClass : NSObject
{
NSString *string1;
NSString *string2;
}
@property( nonatomic, retain)NSString* string1;
@property( nonatomic, retain)NSString* string1;
Затем не забудьте добавить следующее в исходный файл (обычно вверху файла после строки @implementation MyClass)
@implementation MyClass
@synthesize string1;
@synthesize string2;
Тогда в классе, из которого вы вызывали method1 и method2, вы можете изменить код на
//Lets assume somewhere you've called an init Method for your MyClass Object, something like
MyClass* myClassObject = [[MyClass alloc] init];
//you can then call the setters to set the string like so
[myClassObject setString1:@"some string"]; //or myClassObject.string1 = @"some string";
[myClassObject setString2:@"some string"]; //or myClassObject.string2 = @some other string";
//Calling these member variables either of the above ways is valid, I prefer the former as it's a bit easier on the eye for me
//and to get the values back out of the strings you could call
NSString* output = [myClassObject string1];
//or
NSString* output2 = myClassObject.string2;
Теперь вы можете по какой-то причине не использовать @property для переменных-членов NSString, чтобы вы могли изменить исходный файл (.m) так, чтобы он выглядел как
@implementation MyClass
- (void) methodOne: (NSString *) passedString
{
NSLog(@"%@", passedString);
if( string1 != nil )
{
[string1 release];
}
string1 = [[NSString alloc] initWithString:passedString];
}
- (void) methodTwo: (NSString *) passedString
{
NSLog(@"%@", passedString);
if( string2 != nil )
{
[string2 release];
}
string2 = [[NSString alloc] initWithString:passedString];
}
Это должно решить проблему того, почему ваши строки недопустимы, так как вы не будете перезаписывать память и пытаться таким образом считывать обратно мусор. Вы должны будете не забыть выпустить эти строки NSS в свой пакет, если они не равны нулю, иначе вы также получите утечку памяти.
Надеюсь, это поможет.