关于变量的作用域
@protected
—Methods defined in the class and any subclasses can directly access the instance variables that follow.This is the default case.
该类和所有的子类中的方法可以直接访问这样的变量,这是默认的。
@private
—Methods defined in the class can directly access the instance variables that follow, but subclasses cannot.
该类中的方法可以访问这样的变量,子类不可以。
@public
—Methods defined in the class and any other classes or modules can di- rectly access the instance variables that follow.
除了自己和子类中的方法外,也可以被其他类或者其他模块中的方法所访问。开放性最大。
@package
—For 64-bit images, the instance variable can be accessed anywhere within the image that implements the class.
对于64位图像,这样的成员变量可以在实现这个类的图像中随意访问。
全局变量(extern)
在程序的开始处,没有在一个方法里面写了
int gMoveNumber=0;
那么我们说这个变量就是全局变量,也就是说在这个模块中的任何位置可以访问这个变量。
这样的变量也是外部全局变量,在其他文件中也可以访问它。但是访问的时候要重新说明下这个变量,说明的方法是:
extern int gMoveNumber;
当然我们也可以在声明的时候加上extern关键字。
extern int gMoveNumber=0;
这样的话在其他的类中使用还是需要重新说明一下了,而且这时候编译器会给出警告。
如果这个全局变量只是在自己的类中使用,或者其他的类使用的它情况也比较小,那么我们把它定义成第一种情况,如果在外部文件使用的也比较多的话,那么我们把它定义成第二种情况。
这种定义其实违背了封装性。
静态变量(static)
因为全局变量是全局的,影响封装,所以有时候要用静态变量。
static int gMoveNumber;
这是这个变量是这个类中的静态变量。如果不定义初始值的话为零。
如果静态变量定义在方法中,那么这个变量在方法执行完之后还是有效的,如果在第一次调用的时候改变了这个变量的值,那么在第二次调用的时候,这个变量的值是被改变过的值。
如果被定义在类中,那么这种改变也是有效的,就是作用域发生了改变。一个在方法中,一个在类中。
atomic和nonatomic
nonatomic是告诉系统不要使用mutex(互斥)锁定。这种锁定会导致系统的性能低下,所以一般在多线程的时候使用atomic,平时多数用nonatomic。
@synthesize和@dynamic
@synthesize will generate getter
and setter methods for your property.
@dynamic just tells the compiler that the getter and setter methods are
implemented not by the class itself but somewhere else (like the
superclass)
Uses for @dynamic are e.g. with subclasses of NSManagedObject
(CoreData) or when you want to create an outlet for a property defined by a superclass that was not defined as an outlet:
Super class:
@property(nonatomic, retain)NSButton* someButton;
...
@synthesize someButton;
Subclass:
@property(nonatomic, retain)NSButton* someButton;
...
@dynamic someButton;
分享到:
相关推荐
模拟Objective-C中Java的final或C#的密封关键字的保护 该库允许将类标记为 final - 防止它被子类化,或将单个方法标记为 final - 防止它们在子类中被覆盖。 与 Java 和 C# 等效项相比,这些检查在运行时发生,而不是...
2. 第一个OC程序,讲解了如何创建一个OC项目,解释了一些OC程序中的关键字和语法。 3. OC基础语法,对比了OC和C语言的一些区别和共同点。 4. 面向过程与面向对象的概念,并解释了使用面向对象思维解决问题的好处。 5...
第1部分 Objective-C语言 第2章 Objective-C程序设计 2.1 编译并运行程序 2.1.1 使用Xcode 2.1.2 使用Terminal 2.2 解释第一个程序 2.3 显示变量的值 2.4 小结 2.5 练习 第3章 类、对象和方法 3.1 到底什么是对象 ...
Objective-C中Self和Super详解本文要介绍的内容,在Objective-C中的类实现中经常看到这两个关键字self和super,以以前oop语言的经验,拿c++为例,self相当于this,super相当于调用父类的方法,这么看起来是很容易...
多个关键字请用空格分隔,最多填写5个。点击右侧我的Tag可快速添加
本套PPT,拥有以下OC语言的内容: ...二、OC的特有语法(点语法、@property、@synthesize关键字、id、构造方法、分类、description、SEL) 三、内存管理 四、协议(protocol)代码块(block) 五、ARC 等等
Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码。 可以使用OC开发mac osx平台和ios平台的应用程序。 拓展名:c语言-.c OC语言.-m 兼容C++.-mm 注:...
Objective-C Domainr API 包装器 使用/安装 将domainr文件夹复制到您的项目中。 在你的源代码中有一个#import Domainr.h : #import Domainr.h 实例化Domainr类的一个新实例: Domainr *d = [[Domainr alloc] ...
BTextHighlighting用法在您的项目中添加两个文件创建一个NSMutableAttributedString字符串: NSMutableAttributedString *hl = [[NSMutableAttributedString alloc]initWithString:@"Hello world"];并通过传递子字符...
因此你在编程时比如你想以字符串形式和计算机交流,那你很容易就能想到在C中可以使用String这个类,在java中也是Stirng (当然,前提是你至少有一种同抽象级别得语言基础),那OC呢,也有这样一个类吧,不过是某种...
主要介绍了Objective-C中@property属性的用法,包括@property的属性关键字的整理,需要的朋友可以参考下
一般教程,又是语法又是关键字的. 本编教程 直接讲几个关键性技术. 让你立马能上手做一个有"深度"的应用程序. 前提是, 你应该会一些简单的操作, 比如建立一个项目 等等 本教程 旨在 满足已经入门有待提高的开发者...
Objective-C的测试框架gh-unit,源码gh-unit,GHUnit是一款Objective-C的测试框架,除了支持iOS工程还支持OSX的工程。可以作为单独的测试框架,也可以和其他测试框架一同使用,比如SenTestingKit或者GTM。 功能 ...
单色iOS 开发人员使用 CSS color 关键字的颜色选项只需将 ZuSimpelColorClass 拖到您的项目中,然后将头文件ZuSimpelColor.h导入到您的文件中,并ZuSimpelColor.h您在进行 Web 开发一样免费使用 CSS color 关键字。...
Clang是一个C语言、C++、Objective-C语言的轻量级编译器。源代码发布于BSD协议下。Clang将支持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。是一个由Apple主导编写,基于LLVM的C/C++/...
C预处理程序不是编译器的一部分,而是编译过程中的一个单独步骤。 简单来说,C预处理器只是一种文本替换工具,它指示编译器在实际编译之前进行所需的预处理。 我们将C预处理器称为CPP。 所有预处理器命令均以哈希...
other sources:存放除objective-c类之外的源代码文件; resources: 包含应用程序中的非代码文件(因为应用程序只能在自己的沙盒中运行,不然找不到); Frameworks:特殊的库,可以存放库、框架、图像、声音等资源; ...
在Objective-c中,⼦类可继承⽗类中的⽅法,⽽不需要重新编写相同的⽅法,直接可以使 ⽤⽗类的⽅法。 但有时我们不想使⽤使⽤⽗类⽅法,⽽是想作⼀定的修改,怎么办呢?只要将⼦类中书写 ⼀个与⽗类具有相同的⽅法名...
* 使用OC中的枚举类型 `Objective-C 里的常量不能直接在 JS 上使用,可以直接在 JS 上用具体值代替,或者在 JS 上重新定义同名的全局变量` 3. 类的扩展 * 重写方法(调用父类方法,需添加`ORIG`关键字) * 覆盖方法...