虽然做了这么长时间开发,但是居然还是没有注意以new开头定义属性名,编译器不用运行就直接会提示报错。
property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects.
今天无意中想起了就想去搞个清楚明白,所以了,我去网上到处找一些资料来看。
才发现好多说的都是直接说属性不能以关键字init, alloc,new,copy,mutableCopy开头。但是感觉都说得不太清楚。
其实我后来仔细思考了一下,我得到的结果是:
**当程序员定义属性的时候,系统会自动生成getter和sertter方法,而生成的getter方法是以new开头的,这样会与new方法冲突(大多数的类都有一个new方法来创建一个实例对象)。**
大体内部如何,没有深研究的意义了。
除了就是解决方法:
一,既然不可以用,那就改成其他名字就行了。
二,既然是getter方法的冲突,那就重新定义getter方法
@property(strong,nonatomic,getter=isNewString)NSString *newString;
三,既然是getter的冲突,那我们可以麻烦地把getter方法写出来。
结果我奇迹地发现没问题。一样的运用可以赋值和打印。包括使用用self.newString和使用_newString都完全没有问题。
-(NSString *)newString{
return _newString;
}
所以亲们,遇到了一些问题,有些想不明白的地方,有空还是可以多思考,多看看别人的说法或者 自己再找些方法来试试。这样你理解就会更深了。