//
// 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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。