黑马程序员——05-核心语法之一

一、点语法

1、方法示例

Person *p = [Person new];
[p setAge:20];
int age = [p age];

可以用点语法替换setget方法

p.age=20;
int age = p.age;

2、点语法本质

例如当编译器遇到p.age=20;会转换为相应的set方法[p setAge:20]; 所以点语法其实还是方法调用,这是编译器的一种特性。

注:p.age=20;不是访问成员变量

 

3、死循环

注意下面的setget写法,会引起死循环

- (void)setAge:(int)age
{
Self.age = age;
}
 
- (int)age
{
return self.age;
}

二、成员变量的作用域

成员变量也有其使用范围,分为四种类型

  •  @private:私有,只能在当前类的实现直接访问
  •  @protected:被保护,默认类型,可以在当前类以及子类的实现中访问
  •  @public:公共,任何地方都可以直接访问对象的成员变量
  •  @package:只要处在同一个框架中,就可以访问对象的成员变量

 

注:某一类型后的成员变量都为该类型

示例:

@public

int  _age;

int  _weight;

@protected

int  _num;

其中ageweight@public类型,num@protected类型

 

三、@property和@synthesize

@property@synthesize都是Objective-C的关键字,用来生成成员变量的settergetter声明和实现。

1@property 

示例:

#import <Foundation/Foundation.h>
@interface person : NSObject
{
int _age;
} 
- (void)setAge:(int)age; 
- (int)age; // 
@end

以上代码可以改写为

#import <Foundation/Foundation.h>
@interface person : NSObject
{
int _age;
} 
@property int age;
@end

  •  用在@interface@end之间,可以自动生成某个成员变量的settergetter声明
  •  用@property int age;可以代替下面两行代码

- (void)setAge:(int)age; // setter方法
- (int)age; // getter方法

2@synthesize

示例:

#import"person.h"
@implementation Person
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
@end

以上代码可以改写为

#import"person.h"
@implementation Person
@synthesize age=_age;
@end

  • l 用在@implementation和@end之间,以自动生成成员变量settergetter的实现
  • l 用@synthesize age=_age; 可以代替以下代码

- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}

3@synthesize细节

1@synthesize age=_age;

  •  会自动生成agesettergetter实现,并且会访问_age这个成员变量
  •  如果成员变量_age不存在,会.m文件中生成@private类型的成员变量_age

2@synthesize age;

  •  settergetter实现时访问age这个成员变量(不是_age
  •  如果age不存在,会自动生成@private类型的age变量

3)若已手动实现settergetter方法,编译器就不会再生成该方法,只生成另外一个不存在的方法(若成员变量不存在也会生成)。

 

4、最简写法

XCode4.5及以后版本,@property具有@synthesize的功能,@synthesize可以省略,也就是说@property可以同时生成settergetter的声明和实现,默认访问以下划线_开头的成员变量。

@interface person : NSObject
@property int age;
@end


代码中的@property int age;可以做到生成 setter getter 的声明;生成一个 int 类型的 _age 成员变量;生成 setter getter 的实现。

 

四、id

1、类型定义

typedf struct objc_object{
Class isa;
} *id;

  •  id为万能指针,可以指向任何类型的OC对象,相当于NSObject *

2、使用示例:

id d = [Person new];
[d setAge:20]
NSLog(@”%d”,[d age]);
 

  •  使用时id后面不再加*


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值