Xcode4.5出现时的OC新语法

转自 http://www.cocoachina.com/bbs/read.php?tid=107251&fpage=2

 

@synthesize 可以不用再写了

如果在.h文件里有

?
1
@propery NSObject * aProperty


那么可以认为 编译器会类似在.m文件里生成

?
1
@synthesize aProperty = _aProperty



如果上面的都不认识 就可以认为 以下代码

?
1
2
3
4
5
6
7
8
9
@interface Spouce: NSObject
 
@property (strong) NSObject * child
 
@end
 
@implement  Spouce
 
@end


和下面的代码没有太大区别(如果在ARC时代写retain、release。。。。)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@interface  Spouce: NSObject {
     NSObject * _child;
}
- ( NSObject *) child;
- ( void ) setChild:( NSObject *) aChild;
@end
 
@implement  Spouce
- ( NSObject *) child{
     return _child;
}
- ( void ) setChild:( NSObject *) aChild{
     [aChild retain];
     [_child release];
     _child = aChild;
}
@end



@literals

@除了可以表示NSString对象外。现在还可以表示数字、数组、字典、和表达式

?
1
2
3
4
5
6
7
8
NSString * string = @ "a string object" ;
 
NSNumber * numberFromNumber= @12 ;
NSNumber * numberFromExpression= @(20 + 40);
NSArray * array = @[obj1, obj2]; 
//注意上面不再需要nil结尾
NSDictionary * dictionary  = @{@ "key1" : value1, @ "key2" : value2};
//上面也不再需要了,而且key在value前面了。。


然后就是这些东西可以互相嵌套,比如

?
1
NSArray * array = @[@{@ "name" : @ "Bacon" , @ "age" : @12 }, @{@ "name" : @ "Dave" , @ "age" : @14 }];



NSArray 和 NSDictionary 可以使用[]语法了
现在可以直接写:

?
1
2
id firstElement = anArray[0];
anArray[0] = newValue;


替代以前的

?
1
2
id firstElement = [anArray objectAtIndex:0];
[anArray replaceObjectAtIndex:0 withObject:newValue];


?
1
2
id value = aDictionary[@ "key" ];
aDictionary[@ "key" ] = newValue;


替代以前的

?
1
2
id value = [aDictionary objectForkey:@ "key" ];
[aDictionary setObject:newValue forKey:@ "key" ];




在.m自己用的“私有”消息可以不用ClassExtension表达了。

想在.m文件里添加自己的一些消息(方法、函数 同义)而不在.h文件里出现,可以在最近的ClassExtension语法里表达如下

?
1
2
3
4
5
6
7
8
9
10
11
12
@interface AClass ()
 
- ( void ) privateMethod;
 
@end
 
@implement AClass
 
- ( void ) privateMethod{
}
 
@end



现在 可以直接在.m文件里写,而编译器不会出现警告此方法未声明

?
1
2
3
4
5
6
@implement AClass
 
- ( void ) privateMethod{
}
 
@end



如果不知道ClassExtension语法的,
我只想说,ClassExtension是类似Category语法的东西,在.m文件内添加一个无名的Category的@interface声明,然后就可以在里面写私有方法声明,避免编译器乱提示警告。
如果不知道Category语法。。。。。。。。。。。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值