我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一个比较基本的问题,也关乎我们理解Objective-C中对类、类的属性、类的存取器、类的局部变量的统一理解。
在32位系统中,如果类的 @interface 部分没有进行 ivar 声明,但有 @property 声明,在类的 @implementation 部分有响应的 @synthesize,则会得到类似下面的编译错误:
Synthesized property 'xX' must either be named the same as a compatible ivar or must explicitly name an ivar
在 64-bit时,运行时系统会自动给类添加 ivar,添加的 ivar 以一个下划线"_"做前缀。
上面声明部分的 @synthesize window=_window; 意思是说,window 属性为 _window 实例变量合成访问器方法。
也就是说,window属性生成存取方法是setWindow,这个setWindow方法就是_window变量的存取方法,它操作的就是_window这个变量。通过这个看似是赋值的这样一个操作,我们可以在@synthesize 中定义与变量名不相同的getter和setter的命名,籍此来保护变量不会被不恰当的访问。
下面是一个常见的例子
写法一:
@interface MyClass:NSObject{
MyObjecct *_myObject;
}
@property(nonamtic, retain) MyObjecct *myObject;
@end
@implementatin MyClass
@synthesize myObject=_myObject;
写法二:
@interface MyClass:NSObject{
}
@property(nonamtic, retain) MyObjecct *myObject;
@end
@implementatin MyClass
@synthesize myObject=_myObject;
这个类中声明了一个变量_myObject,又声明了一个属性叫myObject,然后用@synthesize生成了属性myObject的存取方法,这个存取方法的名字应该是:setmyObject和getmyObject。@synthesize myObject=_myObject的含义就是属性myObject的存取方法是做用于_myObject这个变量的。这种用法在Apple的Sample Code中很常见。
弄明白了这个语句的意思之后,我们也就清楚了myObject和_myObject的区别,那么,在使用的时候,有什么需要注意的地方,大家应该也都清楚了。是的,myObject是属性,而_ myObject才是变量,我们最终操作的变量都是myObject。
那么,同样是存取操作,语句
self.nameVarPtr = [[ObjectName alloc] init]
nameVarPtr = [[ObjectName alloc] init]
两种赋值方式的区别何在呢?
self.nameVarPtr=xxx 这种赋值方式等价于调用 [self setnameVarPtr:xxx], 而setnameVarPtr:xxx的方法的实现又是依赖于@property的属性的,比如retain,assign等属性。
nameVarPtr = xxx 的赋值方式,仅仅是对一个指针进行赋值。nameVarPtr仅仅是一个指针变量,记录了xxx的地址。在这个过程中不会调用setter方法,不会调用setter方法,就和@property没有关系,从而,也和retain,assign等属性没有关系。这种赋值方式就是一个简单的指针赋值。
综上,对成员变量进行赋值,为防内存泄露需要注意的点:
1.self调用setter方法的方式
ObjectName* tmp= [[ObjectName alloc] init];
self.nameVarPtr =tmp; //retainCount=2
[tmp release]; //retainCount=1
2.指针赋值方式,不会调用setter方法
nameVarPtr= [[ObjectName alloc] init]; // retainCount=1
所以,笔者建议大家在对某个变量进行赋值操作的时候,尽量要写self.myObj = xxx; 这才是最可靠的方法。
分享到:
相关推荐
相信每个初学者对@property和@synthesize都感到非常的陌生,在此给大家分享下我的自己的理解,有不当之处,还望多多指教。详细说明文章在下面连接http://blog.csdn.net/comeontom/article/details/7455459
### Objective-C语言教程、案例与项目资源详解 #### 一、Objective-C基础知识 **1.1 类与对象** Objective-C的核心概念是类和对象。类是对象的模板或蓝图,它定义了对象应该具备哪些属性(如变量)和行为(如方法...
### iOS开发中属性property和synthesize详解 #### 一、引言 在iOS开发过程中,`@property` 和 `@synthesize` 是两个非常重要的概念。它们不仅简化了代码编写过程,提高了开发效率,还增强了程序的可维护性。本文将...
Objective-C是一种面向对象的编程语言,它是Apple的iOS和macOS操作系统的核心开发语言。Objective-C是在C语言的基础上扩展了Smalltalk式的面向对象特性,使得它既有C语言的强大功能,又具备了面向对象编程的灵活性。...
Objective-C是iOS开发的重要组成部分,尽管Swift语言已经成为苹果推荐的新一代开发语言,但许多现有的iOS应用程序仍然使用Objective-C编写。因此,对于iOS开发者来说,掌握Objective-C仍然是非常有价值的技能。 ###...
Objective-C是一种强大的面向对象编程语言,特别是在苹果的iOS和macOS平台上广泛使用。"objective-c的计算器...通过实践这个项目,开发者不仅可以巩固Objective-C的基础,还能对面向对象编程和iOS开发有更深入的理解。
Objective-C是一种强大的面向对象的编程语言,它是Apple的iOS和macOS开发的基石。这篇文档将深入探讨Objective-C的经典入门知识,以及如何通过提供的源代码进行学习。 Objective-C的语法基础: Objective-C是在...
Objective-C是Xcode开发环境中的主要编程语言之一,Xcode是苹果为Mac OS X和iOS平台提供的集成开发环境(IDE)。在Xcode中,Objective-C代码可以与苹果的Cocoa和Cocoa Touch框架无缝集成,这两个框架提供了大量的...
Objective-C是一种强大的面向对象的编程语言,主要用于Apple的iOS和macOS平台开发。这个"Objective-C基础开发教程源代码"的资源是初学者和开发者深入理解Objective-C语法和实践编程技巧的理想工具。以下是对该教程源...
Swift的出现虽然在一定程度上替代了Objective-C,但对于现有的大量Objective-C代码库和深厚的技术积累,Objective-C仍然在iOS和macOS开发中占有重要地位。 总之,Objective-C程序设计涵盖了面向对象编程的基本概念...
Objective-C是一种通用、面向对象的编程语言,是开发苹果iOS和macOS平台应用程序的主要语言之一。它在C语言的基础上增加了面向对象的功能,使得代码更易于管理和扩展。自2011年自动引用计数(ARC)的引入,Objective...
### Objective-C 学习知识点详解 #### 一、开发环境:Cocoa Cocoa 是一个应用框架集合,主要应用于 macOS 和 iOS 的软件开发。它由两大部分组成:Foundation Kit 和 Application Kit。 - **Foundation Kit**:这是...
Objective-C是一种强大的面向对象的编程语言,主要用于Apple的iOS和macOS操作系统开发。这个"Objective-C语言教程与案例.zip"压缩包包含了一份详尽的教程和实际案例,旨在帮助学习者深入理解并熟练掌握Objective-C。...
Objective-C是一种面向对象的编程语言,它是C语言的超集,特别为苹果的iOS和macOS平台的软件开发而设计。Objective-C通过引入Smalltalk的影响,支持类、方法和属性等面向对象特性,使得程序员能够构建复杂的软件系统...
Objective-C是一种强大的面向对象的编程语言,主要用于Apple的Mac OS X和iOS操作系统。它基于C语言,添加了Smalltalk的类、消息传递等面向对象特性。在这个“Objective-C程序设计+代码”主题中,我们将深入探讨这个...
### Objective-C基础知识及简介 ...以上内容涵盖了Objective-C的基础知识及其在iOS开发中的应用。通过这些知识点的学习,开发者可以更好地理解和掌握Objective-C语言,为后续的iOS应用开发打下坚实的基础。
### Objective-C 快速参考与知识点详解 #### 目标:Objective-C Cheat Sheet解析与深入理解 Objective-C作为苹果公司开发iOS和OS X应用的主要语言之一,在编程领域占据着重要的地位。下面,我们将通过一份...
Objective-C是Apple开发平台上的主要编程语言,尤其在iOS和macOS应用开发中扮演着核心角色。 这本书详细介绍了Objective-C的基础知识,包括语法、类、对象、消息传递等核心概念。Objective-C是一种面向对象的语言,...