-----oc基础语法---oc特有语法(1)
来源:互联网 发布:编程:字符串压缩 编辑:程序博客网 时间:2024/05/16 05:16
一、点语法
1)根据以前学的,调用方法是这样的
Student *stu = [Student new];[stu setAge:100];int age = [stu age];
如果用点语法,这样就可以调用了
stu.age = 100;int age = stu.age;
2)点语法的本质
其实点语法的本质还是方法调用,当使用点语法时,编译器会自动展开成相应的方法。
3)在xcode项目创建一个class类,叫person。在person.h中申明
#import <Foundation/Foundation.h>@interface Person : NSObject{ int _age; NSString *_name;}// 年龄的getter和setter- (void)setAge:(int)age;- (int)age;- (void)setName:(NSString *)name;- (NSString *)name;@end
在person.m中实现类的功能
#import "Person.h"@implementation Person- (void)setAge:(int)age{ _age = age;}- (int)age{ return _age;}#pragma mark - 姓名的seter和getter#pragma mark 姓名的set方法- (void)setName:(NSString *)name{ _name = name;}#pragma mark 姓名的get方法- (NSString *)name{ return _name;}@end
在main.m中
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]){ Person *p = [Person new]; p.name=@"sfjk"; p.age=10; int a = p.age;
点击运行按钮运行结果
4)注意死循环
- (void) setAge:(int)age { self.age = age;}- (int) age { return self.age;}
这两个方法都将会引发死循环。
二、 @property和@synthesize
1)@property用在@inteface中用来自动生成setter和getter的声明。例如:
用@property int age;就可以代替下面的两行
- (int)age; - (void)setAge:(int)age;
@synthesize
用在@implementation中,用来自动生成setter和getter的实现。
- (int)age{ return _age;}- (void)setAge:(int)age{ _age = age;}
2)注意细节:
1. @synthesize age = _age;setter和getter实现中会访问成员变量_age ,如果成员变量_age不存在,就会自动生成一个@private的成员变量_age。
2. 若手动实现了setter方法,编译器就只会自动生成getter方法,若手动实现了getter方法,编译器就只会自动生成setter方法,若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量。
3. @propert的新特性
自从Xcode 4.x后,@property就独揽了@synthesize的功能。也就是说,@property可以同时生成setter和getter的声明和实现
默认情况下,setter和getter方法中的实现,会去访问下划线 _ 开头的成员变量.
4)实例运行
创建person.h文件
#import <Foundation/Foundation.h>@interface Person : NSObject//{// int _age;//}@property int age;@end
person.m文件
#import "Person.h"@implementation Person@end
在main.m中
#import "Person.h"int main(int argc, const char * argv[]) { Person *p = [Person new ]; [p setAge:10]; int a =[p age]; NSLog(@"Hello, World\n%d",a ); return 0;}
运行结果
可以看出要想懒得动手,一个@property就搞定了。
补充一句,如果是用@property申明的属性,而且没有指明属性的作用域,那么这个属性默认是protect属性的。
好了,今天就学到这里了
- -----oc基础语法---oc特有语法(1)
- OC---特有语法1
- OC语法基础(5)—OC特有
- OC特有语法
- OC特有语法
- OC--特有语法
- OC特有语法<一>
- OC特有语法<二>
- OC特有语法总结
- 黑马程序员-IOS-OC基础-OC特有语法
- 黑马程序员——OC基础---OC特有语法
- 黑马程序员-OC语言基础:OC特有语法
- OC语法基础(8)-- OC中特有的…
- 黑马程序员--oc:特有语法1
- OC笔记 - 特有语法(2015.1.30)
- 黑马程序员---OC特有语法(一)
- 黑马程序员---OC特有语法(二)
- OC特有的方法(点语法,)
- hdu 1016 prime ring 简单dfs输出
- memcache的集群、高可用
- Partition-Wise Join of List-Partitioned Tables
- cell属性改变后又快速恢复初始化属性的解决方法
- oracle分区表之交换分区 altertable exchange partition with table
- -----oc基础语法---oc特有语法(1)
- Ubuntu安装Emacs出现到依赖问题及解决方案
- nginx反向代理原理
- ubuntu14.04 安装hadoop
- 【cocos2d-x3.5】Lua定时器Schedule
- Memcache常用方法
- sphinx索引原理
- 我的iOS开发 1-开发平台、初尝试
- 关于android SDK安装Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-1.xml出错二