objective-c 中 . 运算符详解
2015-08-09 11:09
579 查看
//
// 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;
}
// 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;
}
相关文章推荐
- uva 1161 Objective: Berlin (最大流)
- iOS Objective-C 身份证号码校验
- iOS开发(Objective-C)常用库索引
- 代理作用之一代理传值:正向传值
- swift中使用object-c代码
- 黑马程序员--- objective-c 类的继承
- OC语法——Object-C retain、copy、mutableCopy的详细分析
- 从JSONModel看Objective-C的反射机制
- 《Objective-C基础教程》第6章 源文件组织
- [iOS-Swift编程]Method '...' with Objective-C selector '...' 错误的解决方法
- objective-c算法详解(一、链表)
- 每天学点java—Object类
- 《learn objective-c on the Mac for OS X and IOS》<译名>《objective-C基础教程》
- 【Obective-C编程开发】Objective-C之BOOL一清二楚
- 所闻所获4:下拉刷新控件2
- 【Objective-C】类的属性、变量、前向声明
- 所闻所获3:下拉刷新控件1
- 关于接口与Object 类的关系
- ASN.1 Encode an Object Identifier (OID) with OpenSSL
- [IOS] Object - Oriented