1
MartianZ 2012-04-03 09:14:35 +08:00
真不错,受益匪浅
感谢楼主分享 |
2
ultragtx 2012-04-11 15:44:04 +08:00
这两天按着这个改了改习惯,发现@implementation里面如果照他说的
“ALWAYS create a @property for every data member and use “self.name” to access it throughout your class implementation. NEVER access your own data members directly.” 全部用self.myobj访问来获得成员的值,单步调试Step Into的时候简直就是个悲剧 每次都要跳到@synthesize一次 赋值的时候是应该用self调用setter,但是获取变量的值的话感觉完全没有必要用self,而且一般情况下很少手写setter和getter,个别几个特殊的注意一下就行了,追求一致性也不至于到这个份上,还是直接用 _myobj 或者 myobj_ 这种方式访问比较靠谱 |
3
xesique 2012-04-11 16:25:42 +08:00
楼上的@ 含义变了,有没有转义的@ 符号啊?
试试 \@implementation |
4
fly2never OP @ultragtx 全部用属性而不用成员变量的原因我觉得是通过强制规范禁止使用成员变量,以免内存问题.取消了成员变量就不可能出现成员变量被赋值的情况,全部都通过属性来处理.这样对团队开发很有意义.当然如果一个人开发,能保证setter的时候全部用属性,不用成员变量也没大问题.
|
5
ultragtx 2012-04-11 21:28:22 +08:00
@fly2never 赋值取值一般人难道还分不清么 这种加self方法基本能把step into功能废掉了 如果你们团队不进行这种调试那就当我没说
|
6
fly2never OP @ultragtx 嗯,想了下这样确实不好.class类中如果要使用,还是推荐instance variable.
原文中有描述: "NEVER allow your instance variable names to be confused with property names, or with data member names. ALWAYS end your instance variable names with an underscore. UNLESS you are subclassing a 3rd-party class which already has a data member of the same name, in which case pick another non-similar name or add another underscore and put a comment in as to why you did this. Use “@synthesize name = name_;” in your implementation, instead of just “@synthesize name;” WHY? Even within the class implementation you have to have a very good reason to access a data member directly, instead preferring property accessors." |
7
fly2never OP @ultragtx 这里的"NEVER access your own data members directly" 应该是指子类吧.
其他类调用,默认protect会禁止使用,只有子类才有可能直接使用. |
8
lasse 2012-04-13 09:12:49 +08:00
|
9
fly2never OP |
10
edison0951 2012-05-28 18:10:13 +08:00
@fly2never,那你觉得不要成员变量,全用属性来控制的缺点在哪?
|
11
gonefish 2012-05-28 18:30:00 +08:00
有很多个人习惯
|