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

学习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开发中用起来就会很方便了,我是蓝鸥蒋杏飞,有相同爱好的同仁们可以相互讨论下下。


分享标题:iOS培训教程——iOS开发中常见的语句@synthesizeobj=_obj详解
当前地址:http://scjbc.cn/article/poiogi.html

其他资讯