objective-c 中 . 运算符详解

来源:互联网 发布:php mysql答题系统 编辑:程序博客网 时间:2024/06/16 09:04

//

//  main.m

//  OC中的.语法

//

//  Created by 就不告诉你我是谁 on 15-8-9.

//  Copyright (c) 2015 xuqigang. All rights reserved.

//

#import <Foundation/Foundation.h>

#import "Test01.h"

//@interface Test01 : NSObject

//{

//    int a;

//@public int b;

//    int c;

//}

//@property int c;

//- (void) print;

int main(int argc, const char * argv[])

{

    @autoreleasepool {     

        // insert code here...

        NSLog(@"Hello, World!");

  /*   OC . 语法的功能:

        1、通过 . 操作符可以直接调用类中的成员方法

        2、通过 . 操作符可以进行实例变量的赋值和读取操作,前提是该变量在类中已经实现了setter getter方法。其中setter getter方法的定义和实现可以自定义实现,也可以通过@property声明 @synthesize 实现的方式来完成。如果一个实例变量只有setter getter 方法 那么这个实例变量也只能进行赋值或者 取值操作。值得注意的是,例如:成员变量 int name; setter方法必须按照这种方式声明:-void) name; getter方法必须这样声明:- (int) getName;

        3、对于一个用@public 修饰的成员变量,我们还可以在外面通过-> 操作符来进行取值和赋值操作,否则不能使用该方式。->不能用于访问成员函数。

        多说无益,举例说明:

        */

        int data=9;

        Test01 *p = [[Test01alloc] initWith:2 :3 :5];//实例化一个对象p并将其成员变量初始化为 2 3 5

/*      下面开始说OC 里面 .语法的用处,请看下面示例:

        p.a;程序报错 无法使用 .语法 因为类中没有实现settergetter方法

        p->a; 使用-> 直接访问成员变量 程序报错  原因  使用@interface定义一个类时,里面的成员属性默认为protected 在外部无法访问

        data=p.b; 这里不能进行赋值操作  原因:没有实现 setter getter 方法

*/

        data=p->b;

        p->b=data;

/*     这里通过-> 变量b可以进行取值和赋值操作 因为 b的属性权限为public

        data=p.b; 程序报错!这里不能进行取值操作 原因:虽然成员变量b 被声明为public 类型但没有实现 setter getter 方法,所以不能使用.运算符*/

        data=p->c;

        p->c=data;

/*      这里通过-> 变量c可以进行取值和赋值操作 因为 c的属性权限也为public*/

        data=p.c;

        p.c=data;

/*      里可以进行取值、赋值操作  原因:成员变量c通过@property @synthesize 实现了 setter getter 方法,所以能使用.运算符*/

        p.print;//通过 . 语法也可以直接调用类中的成员方法

/*      p->print; -> 操作符 是用来访问成员变量的 不能用来调用成员方法*/

        data=p.func;//调用成员方法并用data 接收方法返回值

        NSLog(@"%d\n",data);

    }

    return 0;

}


0 0
原创粉丝点击