复制具有不同内存地址的变量

时间:2015-02-17 06:25:40

标签: ios objective-c variables pointers memory-management

我试图创建一个包含相同属性的变量的新实例'另一个变量的值。

我不能像在下面的代码中那样直接分配它们,因为在这种情况下,它们都将指向相同的内存地址。

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
      UITextField * newTextField = [UITextField new];

      newTextField = textField; // the problem goes here ( same memory address )

      [self.view addSubview:newTextField];
      [textField resignFirstResponder];
      [textField removeFromSuperview];
}

我通过自己设置每个属性来找到一种不切实际的方法。

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
     UITextField * newTextField = [[UITextField alloc] initWithFrame:textField.frame];
        newTextField.font = textField.font;
        newTextField.text = textField.text;
        newTextField.textColor = textField.textColor;
        newTextField.textAlignment = textField.textAlignment;
        newTextField.center = textField.center;
        // ...
        // ...
}

但在这种情况下,我必须将每个单独的属性设置为新实例,我发现这是不切实际的。

在没有更改新变量的内存地址的情况下,没有更好的方法将旧变量设置为新变量。

1 个答案:

答案 0 :(得分:0)

要做到这一点,你必须继承UITextField并使你的子类符合NSCopying协议,为此你必须在你的UITextField子类中实现copyWithZone方法。