您的位置:首页 > 移动开发 > Objective-C

ObjectiveC中的self.变量和_变量的区别

2015-08-26 16:07 363 查看
今天因需要重写@property属性的set方法,没想到程序编译通过了,却运行不了,set方法一直报错,错误如下:



一开始真是搞不明白啊,都能改用别的方法,不重载这个东东了,烦死了!不过烦归烦,问题终归还是要解决的。我看着代码,突然觉得这个self.变量是不是不对呢?于是我把set函数里self改成了下划线,成功运行了!!太棒了!

这里就解释一下原因,我们都知道,在苹果的官方源码中,大量使用了下划线,那为什么苹果会使用下划线而不是self呢?这里有篇博客大家可以参考一下,说得比较清楚,不过可能在ARC环境下不再适用了吧。http://blog.sina.com.cn/s/blog_7b9d64af0101923n.html

还有一点需要了解的就是@property定义的属性编译器会自动编写getter和setter方法,当然,getter和setter方法也可以根据需要重写。

先给出例子:

Test.h



Test.m



测试代码



运行结果



从这个简单的例子中,很清楚可以知道,利用self改变变量值,其实是调用了setter方法,但是下划线这种方式并没有调用setter方法。所以也可以说明了我之前在写setter方法时,在setter方法里使用self肯定会有问题。

在这个简单的测试代码里,我写了四个NSString,主要是为了说明一下,公共变量和私有变量,对初学者来说,一开始很容易混淆的。这四个变量中,只有string2能被外部类访问,其他三个都不能,另外,string2和string4有默认的getter和setter方法,可以使用self和下划线获取变量。string1和string3直接使用string1=XXX或XXX=string1就可以。

这是很简单的一个说明,太本质的东西我暂时也没有弄清楚,记录一下,希望看到这个的人不要再像我一样犯错误!如果有什么不对的对方,欢迎大神们指教!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  self objetive-c xcode6-4