我是新来的,已经搜索过“自己有必要吗?”之类的相关文章。和“在不使用自引用的情况下设置 Objective-C 类属性”但是我仍然无法得到可以解释我的情况的明确答案。
我有一个简单的类,我的 UI 有两个文本字段和一个按钮,代码如下:
@interface testViewController : UIViewController {
NSString *teststring_A;
NSString *teststring_B;
IBOutlet UITextField *textfield_1;
IBOutlet UITextField *textfield_2;
}
@property (nonatomic, retain) NSString *teststring_A;
@property (nonatomic, retain) NSString *teststring_B;
- (IBAction)action1:(id)sender;
- (IBAction)action2:(id)sender;
@end
@implementation testViewController
@synthesize teststring_A;
@synthesize teststring_B;
- (void)dealloc {
[super dealloc];
}
- (IBAction)action1:sender
{
teststring_A = textfield_1.text ;
NSLog(@"teststring_A in action 1 is : %@\n", teststring_A);
teststring_B = textfield_2.text ;
NSLog(@"teststring_B in action 1 is : %@\n", teststring_B);
}
- (IBAction)action2:(id)sender
{
NSLog(@"teststring_A in action 2 is : %@\n", teststring_A);
NSLog(@"teststring_B in action 2 is : %@\n", teststring_B);
}
输出是:
2010-11-19 15:32:14.827 test[419:207] teststring_A in action 1 is : 123
2010-11-19 15:32:14.829 test[419:207] teststring_B in action 1 is : 456
2010-11-19 15:32:14.927 test[419:207] teststring_A in action 2 is : 123
2010-11-19 15:32:14.929 test[419:207] teststring_B in action 2 is : {(
>
)}
当点击按钮时,它首先触发action1然后触发action2。我的问题是......在action2中,teststring_B的值变得不正确,有时应用程序甚至崩溃。让我困惑的是(1)为什么 teststring_A 的值是正确的???(2) teststring_B 由 textfield_2.text 分配,它不是用'alloc'创建的,所以假设指针应该一直存在。那么为什么 teststring_B 的值在 action2 中变得不正确???(3)在dealloc中,我应该释放teststring_A和teststring_B吧?(我认同 )
我所知道的是如果我添加'self.',比如'self.teststring_B = textfield_2.text;' 那么就不会有问题了。该值将是正确的。所以我想知道技术原因。