Objective-c 实例变量的访问级别

在C#和JAVA中无论是method还是variable都有严格的访问级别控制,那么在object-c中对访问级别的使用非常稀少,原因可能是因为在method上没有访问级别的语法,单单控制变量没有什么力度吧。下面我们来讨论下实例变量的访问级别。实例变量在类中声明时默认是protected的不像一般的C++或C#,java 默认声明是private的。这一点让我们在多语言环境上开发的人比较困惑。

下面介绍下实例变量的访问级别:

protection level   complier  directive desciption
privete @private 在类内部声明的方法使用
protected @protected 在本类和子类内部使用
public @public 从任意的类和方法中使用
package @package 在程序包内部任意地方使用, 目前只适用于64位系统

显式保护和隐式保护

因为protected 是默认的访问级别,同时你可以显式的声明。

@interface Player:NSObject{
//this is  a protected instance varible that implicit declare
int m_playerExperience;
}

@interface Player:NSObject{
//this is  a protected instance varible that explicit declare
@prootected int m_playerExperience;
}

两种方式没有任何区别。但是最佳做法是显式的写出访问级别,即时你知道它默认的访问级别。

时间: 2024-08-11 04:58:07

Objective-c 实例变量的访问级别的相关文章

Objective - C setter,getter与实例变量的关系, 属性, 点语法

什么时setter,getter, 在OC里, 为实例变量赋zhi的方法称作setter(设置器) 读取实例变量值的方法称作getter(访问器) 我们之前写的那些赋值取值的方法都可以称作setter和getter setter.getter的书写格式 OC里规定里setter和getter的书写格式 如果一个实例变量是 int age: 或者int_age: setter的书写格式如下 - (void)setAge:(int)age;即set+首字母大写的实例变量名(忽略下划线) getter

四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的

java线程安全问题之静态变量、实例变量、局部变量

Java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同<java并发编程实践>中所说: 写道 给线程安全下定义比较困难.存在很多种定义,如:"一个类在可以被多个线程安全调用时就是线程安全的". 此处不赘述了,首先给出静态变量.实例变量.局部变量在多线程环境下的线程安全问题结论,然后用示例验证,请大家擦亮眼睛,有错必究,否则误人子弟! 静态变量:线程非安全. 静态变量即类变量,位于方法区,为所有对象共享,共享一份内存,一旦静态

Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法)

1.执行顺序 1.1.一个类中的初始化顺序 (静态变量.静态初始化块)=>(变量.初始化块.构造器). 1.2.两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)=> 子类的(静态变量.静态初始化块)=> 父类的(变量.初始化块.构造器)=> 子类的(变量.初始化块.构造器). 示例如下:(结果见注释) 1 class A { 2 public A() { 3 System.out.println("Constructor A."); 4 } 5

iOS 成员变量,实例变量,属性变量的区别,联系

在ios第一版中: 我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: 注意:(这个是以前的用法) @interface MyViewController :UIViewController { UIButton *myButton; } @property (nonatomic, retain) UIButton *myButton; @end 在现在iOS版本中: 苹果将默认编译器从GCC转换为LLVM(low leve

JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量

转载请注明出处:http://blog.csdn.net/xyang81/article/details/42836783 在上一章中我们学习到了如何在本地代码中访问任意Java类中的静态方法和实例方法,本章我们也通过一个示例来学习Java中的实例变量和静态变量,在本地代码中如何来访问和修改.静态变量也称为类变量(属性),在所有实例对象中共享同一份数据,可以直接通过[类名.变量名]来访问.实例变量也称为成员变量(属性),每个实例都拥有一份实例变量数据的拷贝,它们之间修改后的数据互不影响.下面看一

KVC-键值编码是一种间接地访问实例变量的方式

KVC 键值编码是一种间接的访问实例变量的方式[对象 setValue:@"A" forKey:@"name"]; 工作原理:    1.先查找该类有没有对应的setName: setter方法.如果有则调用setter方法给实例变量赋值,如果没有,转到第二步:    2.在查找带下划线的实例变量_name.如果有则给_name赋值,如果没有则转到第三步    3.最后查找和key值相同的实例变量name,如果有,则给name赋值,如果没有,转到第四步    4.调

静态变量与实例变量的区别

语法定义上区别:被static修饰的变量称为静态变量或者类变量.没有被static修饰的对象称为实例变量  程序运行上区别:只有创建实例对象后,其中的实例变量才会被分配空间,才能使用这个实例变量.但是静态变量不属于不属于某个实例对象,而是属于类,所以也称类变量.只要程序加载了类的字节码,不用创建任何的实例对象,静态变量就会被分配空间,就可以被使用了.总的来说,实例变量必须创建对象后才可以通过这个对象来使用,而静态变量则可以直接通过使用类名来使用! 举个例子: public  class Test

ruby中的实例变量和类变量

定义很简单:实例变量@开头,类变量@@开头 看了一些文章和书,目前了解到的(其实还是不太懂,先记着吧,错了再改): 类变量:可以在类方法和类实例方法中访问,也能被子类继承,并且子类修改之后,父类的值也会更改. 不同的子类都共享这个一个数值,包括子类的实例,都可以来修改这一个值.就理解成:不管自己还是子类的,什么函数都可以访问,也都可以改,改了之后也是大家共享. 实例变量:能被类方法访问,不能被继承,子类中赋值不会影响父类. 子类如果修改了,其实是不是重新定义了一下又赋了新的值? 这个其实更像应该