标签:
//
// 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 = [[Test01 alloc] initWith:2 :3 :5];//实例化一个对象p 并将其成员变量初始化为 2 3 5 ;
/* 下面开始说OC 里面 . 语法的用处,请看下面示例:
p.a;程序报错 无法使用 . 语法 因为类中没有实现setter和getter方法
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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u012129719/article/details/47374297