IOS-getter和setter方法

原创 2014年05月27日 14:02:02

--点语法

可以不使用[student  age],用student.age来访问变量

虽然看起来student.age是直接访问变量,但本质还是调用了方法来访问变量


为什么要设计点语法?

方便程序员快速入手OC

简化程序设计

隐藏了内存管理细节

隐藏了多线程、同步、加锁细节

方法调用

Student *stu = [[Student alloc] init];

[stu setAge:100];

int age = [stu age];


点语法

stu.age = 100;

int age = stu.age;

点语法本质

其实点语法的本质还是方法调用

当使用点语法时,编译器会自动展开成相应的方法

stu.age = 10;    展开为  


[stu  setAge:10];


int  age = stu.age;     展开为

int  age = [stu  age];

@property

@property让编译器自动生成getter和setter的声明

@property int age;就可以代替下面的两行

- (int)age;   // getter

- (void)setAge:(int)newAge;  // setter

#import <Foundation/Foundation.h>

@interface Student {

int age;

}

- (int)age;   // getter

- (void)setAge:(int)newAge;  // setter


@property int age;

@end

@synthesize

@synthesize让编译器自动实现getter和setter

@synthesize age;就可以代替

- (int)age{

return age;

}

- (void)setAge:(int)newAge{

age = newAge;

}

#import "Student.h"

@implementation Student 

@synthesize age;

- (int)age{

return age;

}

- (void)setAge:(int)newAge{

age = newAge;

}

@end


在类内部可以直接访问成员变量,如
age = 100;
int  temp = age + 10;
self.age不是直接访问成员变量,而是调用了getter或者setter方法
self.age = 100; 
// 相当于 [self  setAge:100];
// 不要在setAge:中写self.age = 100; 会造成死循环
int  temp = self.age + 10;  // int  temp = [self  age] + 10;

@synthesize age = _age; 展开


- (int)age{

return _age;

}

- (void)setAge:(int)newAge{

_age = newAge;

}


JavaScript中的setter和getter方法!!

javascript中的setter、getter是平时接触比较少的方法,其本身也并不是标准方法,只在非ie浏览器里支持(ie内核也许有其他方法可以做到呢?暂时不知其解),但是加以利用可以做许多事情,...
  • qq_34986769
  • qq_34986769
  • 2016年07月21日 15:39
  • 2058

新手getter、setter指南

原文地址:http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.h...
  • ba_jie
  • ba_jie
  • 2011年11月08日 12:04
  • 9283

Java的setter方法和getter方法的使用

java有三大特性:封装,继承还有多态。                   而今天,我来讲一下其中最重要的特性之一:封装。           首先,属性可用来描述同一类事物的特征,方法可描述一类事...
  • gdut_2012
  • gdut_2012
  • 2013年12月07日 21:47
  • 8239

getter和setter方法原理详解

public class Test{ public int age; } public class Test{ private int age; public void se...
  • itzyjr
  • itzyjr
  • 2013年12月01日 06:44
  • 1145

JavaScript对象中属性的getter和setter方法

JavaScript对象的属性是由名字、值和一组特性(可写、可枚举、可配置等)构成的。在ECMAScript 5中,属性值可以用一个或两个方法代替,这两个方法就是getter和setter。var m...
  • u012510478
  • u012510478
  • 2017年01月10日 11:54
  • 2162

OC 语言- 同时重写setter方法或者getter方法会报错

问题:同时重写setter方法或者getter方法会报错,说不认识成员变量。例如属性 NSString * name;//setter方法 -(void)setName:(NSString *)nam...
  • jeikerxiao
  • jeikerxiao
  • 2016年08月25日 13:57
  • 598

setter-getter方法

setter方法setter方法的作用 作为外部接口,用来设置成员变量,可以在方法的实现部分过滤掉一些不合理的值. setter方法的命名规范 1.必须是对象方法; 2.返回值类型为void; 3.方...
  • cxw2012
  • cxw2012
  • 2015年08月31日 22:31
  • 643

【java】类中使用getter和setter的优势

java有三大特性:封装,继承还有多态。            而今天,我来讲一下其中最重要的特性之一:封装。           首先,属性可用来描述同一类事物的特征,方法可描述一类事物可做...
  • lzm18064126848
  • lzm18064126848
  • 2015年08月28日 14:52
  • 2929

iOS ARC MRC情况下重写setter getter方法

啥都不说了上代码。@interface People : NSObject @property (nonatomic,retain) NSArray *oneArr; @property (nonat...
  • FIZZ_CHIANG
  • FIZZ_CHIANG
  • 2015年07月03日 09:42
  • 1755

Myeclipse中如何快捷键生成setter和getter方法?

一:一般快捷生成getter、setter方法我是使用ALT + SHIFT + S 让后按下键盘上的r键。在使用ALT + A 表示选择所有的属性都生成getter、setter方法。点击ok。二:...
  • u013456370
  • u013456370
  • 2015年01月08日 19:34
  • 3724
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS-getter和setter方法
举报原因:
原因补充:

(最多只允许输入30个字)