Objective-C 成员变量

成员变量的访问权限

Objective-C中的成员变量有以下三种属性

  • public(外部及其子类可访问)
  • protected(子类可访问,外部不可访问)
  • private(外部及其子类不可访问)

默认情况下,是protected属性

例子:类A有3个属性,类B是类A的子类,main函数对于类A来说是外部。

A.h

@interface A : NSObject
{
@public
    int publicVar;
@protected
    int protectedVar;
@private
    int privateVar;
}
@end

main.m

int main(int argc, const char * argv[])
{
    @autoreleasepool
    {
        A *a = [[A alloc] init];
        a->publicVar = 1;       //OK
        a->protectedVar = 2;    //Error 编译不过
        a->privateVar = 3;      //Error 编译不过
    }
    return 0;
}

B.m

@implementation B
- (void)f
{
    B *b = [[B alloc] init];
    b->publicVar = 1;       //OK
    b->protectedVar = 2;    //OK
    b->privateVar = 3;      //Error 编译不过
}
@end

注意,这里访问的方式用的是【->】而不是【.】哦哦哦哦

时间: 2024-10-06 03:29:48

Objective-C 成员变量的相关文章

刨根问底Objective-C Runtime(4)- 成员变量与属性

http://chun.tips/blog/2014/11/08/bao-gen-wen-di-objective[nil]c-runtime(4)[nil]-cheng-yuan-bian-liang-yu-shu-xing/ 上一篇笔记讲述了objc runtime中消息和Category的细节,本篇笔记主要是讲述objc runtime的 成员变量和属性. 习题内容 下面代码会? Compile Error / Runtime Crash / NSLog…? @interface Sark

Java的成员变量初始化

对于方法里面的成员变量,Java要求程序员强制提供一个初始化的值.比如下面这个方法就会出错: public class Breakyizhan{ public void Z(){ int z; z++; } public static void main(String[] args) { Breakyizhan B = new Breakyizhan(); B.Z(); } } /* (www.breakyizhan.com) 输出结果是: 编译会出错,方法变量没有初始化 */ 而对于类的数据,

Delegate成员变量和Event的区别

上周五有同事问了我一个问题:Delegate和Event有什么区别?具体来说在设计一个类的时候,声明一个事件(Event)和声明一个Delegate类型的成员变量有啥区别. 我的第一反应是没啥区别,虽然从语法看起来不一样,但从代码希望达成的效果来看是一致的,本质都是回调函数.当然区别是肯定有的,我能给我的理由是两个:首先从与COM交互操作时,event对应COM接口中的事件:其次VS的编译环境对定义event提供了更加便捷的支持,可以为其自动生成回调函数的框架. 翻了翻MSDN,并没有直接描述两

C# 字段、属性、成员变量 [转载]

一.定义与作用 1.字段(field):是C#类级别定义的,和方法同一级别. 一般用来类内部进行访问,充当一种类中的"全局变量"角色:或者配合属性来使用 2.属性:同样是C#类级别定义的,一般是供外部类访问的. 3.成员变量:"全局变量",在类中定义的变量,区别于在方法中定义的局部变量.它与字段属性不是同一级别概念,字段,属性都可以叫做成员变量. 二.使用 class Basic { private string FieldVar;//这是字段,在当前类中调用 pr

Java接口里定义成员变量 说明

首先你要弄清接口的含义.接口就是提供一种统一的'协议',而接口中的属性也属于'协议'中的成员.它们是公共的,静态的,最终的常量.相当于全局常量. 在interface里面的变量都是public static final 的.所以你可以这样写: public static final int i=10; 或则 int i=10;(可以省略掉一部分,在接口里的成员变量默认就是public static final) 注意在声明的时候要给变量赋予初值 解释: 首先你要弄清接口的含义.接口就是提供一种统

成员变量的定义与使用

成员变量又称为成员属性,它是描述对象状态的数据,是类中很重要的组成成分.本节详细讨论如何来定义成员变量.成员变量的访问权限,以及静态成员变量与实例成员变量之间的区别. 成员变量的定义 定义成员变量的语法如下:[变量修饰符] 类型说明符变量名类的成员变量和在方法中所声明的局部变量都是用户标识符,它们的命名规则相同.变量修饰符是可选项,一个没有变量修饰符的变量定义如下: public class Cuber{ double width,height; int number; } 成员变量的类型可以是

C++ 成员变量是别的类的对象

?在成员函数中,可以将this指针当参数传递,也可以返回this指针,或返回通过this指针拿到的对象 /* 成员变量是别的类的对象 */ #include <iostream> using namespace std; //日期类 class Date { int year,month,day; public: //构造方法 Date(){ cout << "Date() " << endl; } //有参 Date(int _y,int _m,i

《coredump问题原理探究》Linux x86版6.3节有成员变量的类coredump例子

在探究完类成员变量分布后,来定位一个coredump例子来实践一把: (gdb) bt #0 0x0804863c in xuzhina_dump_c06_s2_ex::print() () #1 0x08048713 in main () 看一下xuzhina_dump_c06_s2_ex::print的汇编: (gdb) disassemble 0x0804863c Dump of assembler code for function _ZN22xuzhina_dump_c06_s2_ex

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承.(4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承. 分析以上程序示例,主要疑惑点是“子类继承父类的成员变量,父类对象是否会实例化?私有成员变量是否会被继承?被继承的成员变量

成员变量和局部变量的区别

1)位置不同: 成员变量:类中方法外. 局部变量:在方法定义上或者方法定义中. 2)在内存中位置不同: 成员变量:在堆内存. 局部变量:在栈内存. 3)生命周期不同: 成员变量:随类的加载而加载,随类的对象消失而消失. 局部变量:随着方法的调用而存在,随着方法调用完毕而消失. 4)初始化值不同: 成员变量:有默认的初始化值,系统根据该成员变量的类型来给默认值. 局部变量:必须有初始化值或者是在使用这个局部变量之前而赋值,没有默认初始化值. 注意:当局部变量和成员变量名称一致,就近原则输出变量的值