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

来源:互联网 发布:金山软件官网 编辑:程序博客网 时间:2024/06/06 11:05

今天因需要重写@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.h

Test.m
Test.m

测试代码
测试代码

运行结果
运行结果

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

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

这是很简单的一个说明,太本质的东西我暂时也没有弄清楚,记录一下,希望看到这个的人不要再像我一样犯错误!如果有什么不对的对方,欢迎大神们指教!!

0 0