Objective-c成员变量的定义方式?如何写才规范?
方式一:(为何要定义一个_test?下划线开头代表什么意思?在实现的时候怎么又将_test付给了test?)
方式二:(方式2跟方式1到底有何区别?)
方式三:(这种最简单了,但是这样写规范吗?)
这个成员变量定义这块儿,整的很乱,看了很多教程,一个教程一个写法,有时候教程前后还不一样。我更迷茫了,到底该如何定义成员变量?求详细解答。谢谢了。
core-foundation ios objective-c 移动应用开发
Answers
第二第三种个人感觉是极不规范的。
第一种是比较老式的写法,不过 NSString *_test; 这个就是多余的了,这个是更老式的了,那时候要手写 getter setter
因为有了 synthesize 自动属性合成器以后,这步,Xcode已经帮你做过了。
还帮你写了默认的 getter setter 方法,有下划线就是标识,这个是成元变量,以便于区分 getter setter 中的形参(局部变量)。
在 m 文件中是可以直接对 带下划线的 成员变量进行赋值等操作的,但规范还是建议 使用 self.test 这样来操作,除非你正在 setter getter 方法中,那是不能用这个。
还有谷歌那个 objc 代码风格,, 哈哈成员变量 下划线在后面, test_ ,又晕了吧?我估计这个风格是为了完全区分 纯成员变量,和 属性。就是说 后面带下划线的这货,就纯粹是类本身自己用,没有 getter setter,不需要给别的类访问。
最后,早在 Xcode 4.6 起,还是更早来着,记不得了, 什么 synthesize 根本不用写的,Xcode 已经帮你写了 @synthesize test = _test。
所以现在最简洁的思路就是,如果你这个变量,是要给其他类能够访问到的,那么你就直接写个 @property 就够了。
声明成员变量 NSString *_test; 还有属性合成器 @synthesize test = _test,不需要写了,
如果你这个变量,完全不需要给类外部访问,那么你就 自己声明个 成员变量 NSString *test_; 其他别写。该初始化的地方初始化该释放的释放
//----------------
发现被踩了下,纯个人理解可能会有误,如有误望不吝请指出,多谢,
前面最后说的有些不严谨了~ 没说 在 h 和 m 中的区别。
在 h 中,只有 成员变量的话虽然没有 getter setter , 子类还是能访问的。属性的话就是相当于公开的。
在 m 中,都是私有了。