温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

iOS培训教程——iOS开发中常见的语句@synthesize obj=_obj详解

发布时间:2020-07-21 01:21:04 来源:网络 阅读:403 作者:蓝鸥蒋杏飞 栏目:移动开发

学习iOS开发时,会遇到这样那样的问题,那么大家有没有遇到过@synthesizewindow=_window;,在这里面window与_window分别代表什么知道吗?它们的差别在哪,又如何用使用它们,这是学习iOS开发中最常见的问题了。

这里也会涉及到Objective-C中对类、类的属性、类的存取器、类的局部变量的理解:蓝鸥iOS培训推荐:

在32位系统中,如果类的@interface部分没有进行ivar声明,但有@property声明,在类的@implementation部分有响应的@synthesize,则会得到类似下面的编译错误:

Synthesizedproperty'xX'musteitherbenamedthesameasacompatibleivarormustexplicitly

nameanivar在64-bit时,运行时系统会自动给类添加ivar,添加的ivar以一个下划线"_"做前缀。

上面声明部分@synthesizewindow=_window;意思是说,window属性为_window实例变量合成访问器方法。

也就是说,window属性生成存取方法是setWindow,这个setWindow方法就是_window变量的存取方法,它操作的就是_window这个变量。通过这个看似是赋值的这样一个操作,我们可以在@synthesize中定义与变量名不相同的getter和setter的命名,籍此来保护变量不会被不恰当的访问。

下面给大家举一个最常见的例子,一看就明白了:

写法一:

iOS培训教程——iOS开发中常见的语句@synthesize obj=_obj详解

写法二:

iOS培训教程——iOS开发中常见的语句@synthesize obj=_obj详解

这个类中声明了一个变量_myObject,又声明了一个属性叫myObject,然后用@synthesize生成了属性myObject的存取方法,这个存取方法的名字应该是:setmyObject和getmyObject。@synthesizemyObject=_myObject的含义就是属性myObject的存取方法是做用于_myObject这个变量的。这种用法在Apple的SampleCode中很常见。

那么,一样是存取操作语句整理

iOS培训教程——iOS开发中常见的语句@synthesize obj=_obj详解

iOS培训教程——iOS开发中常见的语句@synthesize obj=_obj详解

两种赋值方式的区别何在呢?

self.nameVarPtr=xxx这种赋值方式等价于调用[selfsetnameVarPtr:xxx],而setnameVarPtr:xxx的方法的

实现又是依赖于@propert

y的属性的,比如retain,assign等属性。

nameVarPtr=xxx的赋值方式,仅仅是对一个指针进行赋值。nameVarPtr仅仅是一个指针变量,记录了xxx的

地址。在这个过程中不会调用setter方法,不会调用setter方法,就和@property没有关系,从而,也和retain

,assign等属性没有关系。这种赋值方式就是一个简单的指针赋值。

从上面的说法中得出,对成员变量进行赋值,为防内存泄露,就一定要注意以下两点:

1、self调用setter方法的方式

iOS培训教程——iOS开发中常见的语句@synthesize obj=_obj详解

2、指针赋值方式,不会调用setter方法

iOS培训教程——iOS开发中常见的语句@synthesize obj=_obj详解

总结:在给某个变量赋值的时候,要尽量写self.myObj=xxx;因为这种方法最可靠,最实用的方法,在iOS开发中用起来就会很方便了,我是蓝鸥蒋杏飞,有相同爱好的同仁们可以相互讨论下下。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI