標籤:
//
// 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;程式報錯 無法使用 .文法 因為類中沒有實現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;
}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
objective-c 中 . 運算子詳解