-----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属性的。
好了,今天就学到这里了

0 0