美文网首页写代码的一些习惯细节
在IOS开发中的成员变量与属性

在IOS开发中的成员变量与属性

作者: 大炮打小鸟 | 来源:发表于2017-06-30 11:39 被阅读120次

    1、成员变量和属性区别

    1)@interface中大括号里声明的是“成员变量”;
    
    2)@property声明的是“属性”,
    @synthesize与@property配对,意义是“合成”。
    
    成员变量与属性的区别主要分为以下两点:
    
    1、在@interface中定义变量的话,为当前类的私有(private),顾名思义,这些变量只能在当前类中被访问;而用@property声明的变量为公有(.h里public .m里private),可以在当前类或者其他类中被访问。
    
    2、使用@interface声明的变量,使用变量名进行访问;@property声明的变量用“_变量名”,或者“self.变量名”的形式进行访问。
    

    2、推荐声明方式

    1)在ios第一版中:我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如:注意:(这个是以前的用法)
    
    @interface MyViewController :UIViewController
    {
        UIButton *myButton;
    }
    @property (nonatomic, retain) UIButton *myButton;
    @end
    2)在现在iOS版本中:苹果将默认编译器从GCC转换为LLVM(low level virtual machine),从此不再需要为属性声明实例变量了。如果LLVM发现一个没有匹配实例变量的属性,它将自动创建一个以下划线开头的实例变量。因此,在这个版本中,我们不再为输出口声明实例变量。
    ios5更新之后,苹果是建议以以下的方式来使用:
    @interface MyViewController :UIViewController
    @property (nonatomic, retain) UIButton *myButton;
    @end
    
    
    其实在日常开发过程中能避免使用成员变量与属性的尽量不用,可以用以下方法实现(以UITableView上多个textField为例):
    1)创建可变字典,利用UITextFieldDelegate代理存储多个textField.text,要注意的是只有取消textField的第一响应者才执行代理(- (void)textFieldDidEndEditing:(UITextField *)textField{});
    2)创建可变数组,存储textField对象,此方法取消所有textField的第一响应者比较实用;
    3)为textField设有规律的tag值(比如textField.tag = indexPath.row+100),再利用for循环取消第一响应者。
    

    相关文章

      网友评论

        本文标题:在IOS开发中的成员变量与属性

        本文链接:https://www.haomeiwen.com/subject/prmbcxtx.html