ios6 特性

@synthesize by default(属性自动绑定在 xcode4.4以前,当我们想为类添加一个新的属性,一般都要对应写实例变量和相应的synthesis,但是在Xcode 4.4之后,synthesis现在会对应property自动生成。默认行为下,对于属性foo,当开发者没有写相应的synthesis的时候,编译 器会自动在实现文件中为开发者补全synthesis,就好像你写了@synthesis foo = _foo。


总结一下,新的属性绑定规则如下:

●  除非开发者在实现文件中提供getter或setter,否则将自动生成

● 除非开发者同时提供getter和setter,否则将自动生成实例变量

●  只要写了synthesis,无论有没有跟实例变量名,都将生成实例变量

           ●  如开发者写了@synthesize foo;那么实例变量名就是foo

●  dynamic优先级高于synthesis

           ● 对于写了@dynamic的实现,所有的对应的synthesis都将不生效



@literals(简写)

在xcode4.4以前

NSNumber

所有的[NSNumber numberWith…:]方法都可以简写了:

●  [NSNumber numberWithChar:‘X’]简写为 @‘X’;

●  [NSNumber numberWithInt:12345] 简写为 @12345

●  [NSNumber numberWithUnsignedLong:12345ul] 简写为 @12345ul

● [NSNumber numberWithLongLong:12345ll] 简写为 @12345ll

●  [NSNumber numberWithFloat:123.45f] 简写为 @123.45f

●  [NSNumber numberWithDouble:123.45] 简写为 @123.45

●  [NSNumber numberWithBool:YES] 简写为 @YES

 

NSDictionary

●  [NSDictionary dictionary] 简写为 @{}

●  [NSDictionary dictionaryWithObject:o1forKey:k1] 简写为 @{ k1 : o1 }

●  [NSDictionarydictionaryWithObjectsAndKeys:o1, k1, o2, k2, o3, k3, nil] 简写为 @{ k1 : o1, k2 : o2, k3 : o3 }

 

 

当写下@{ k1 : o1, k2 : o2, k3 : o3 }时,实际的代码会是

// compiler generates:

id objects[] = { o1, o2, o3 };

id keys[] = { k1, k2, k3 };

NSUInteger count = sizeof(objects) / sizeof(id);

dict = [NSDictionary dictionaryWithObjects:objects forKeys:keyscount:count];

 

NSArray

部分NSArray方法得到了简化:

● [NSArray array] 简写为 @[]

●  [NSArray arrayWithObject:a] 简写为 @[ a ]

●  [NSArray arrayWithObjects:a, b, c, nil] 简写为 @[ a, b, c ]

 

 

比如对于@[ a, b, c ],实际编译时的代码是

// compiler generates:

id objects[] = { a, b, c };

NSUInteger count = sizeof(objects)/ sizeof(id);

array = [NSArray arrayWithObjects:objectscount:count];


Mutable版本和静态版本
上面所生成的版本都是不可变的,想得到可变版本的话,可以对其发送-mutableCopy消息以生成一份可变的拷贝。比如

NSMutableArray *mutablePlanets = [@[ 
                                  @"Mercury", @"Venus", 
                                  @"Earth", @"Mars", 
                                  @"Jupiter", @"Saturn", 
                                  @"Uranus", @"Neptune" ] 
                                  mutableCopy];


另外,对于标记为static的数组,不能使用简写为其赋值(其实原来的传统写法也不行)。

如果直接赋值就会提示出错

@implementation MyClass


static NSArray *  thePlanets = @[                                            error:array literals not constant

  @"Mercury", @"Venus", @"Earth",

  @"Mars", @"Jupiter", @"Saturn",

  @"Uranus", @"Neptune"

];


解决方法是在类方法+ (void)initialize中对static进行赋值。

@implementation MyClass


static NSArray *thePlanets; 

+ (void)initialize{ 

    if (self == [MyClass class]) { 

        thePlanets = @[ @"Mercury", @"Venus", @"Earth", @"Mars", @"Jupiter", @"Saturn", @"Uranus", @"Neptune" ]; 

    } 

}


下标

Array

    Song *oldSong = [_songs objectAtIndex:idx];

    [_songs replaceObjectAtIndex:idx withObject:newSong];

可以简写为

    Song *oldSong = _songs[idx];

    _songs[idx] = newSong;


Dictionary

    id oldObject = [_storage objectForKey:key];

    [_storage setObject:newobject forKey:key];

可以简写为

    id oldObject = _storage[key];

    _storage[key] = newObject;


而且你不仅仅能使用它所提供的下标访问。你也可以对自定义的类使用下标访问。

对于我们自定义的类,只需要实现一下的方法就能使用下标访问。

Array

- (elementType)objectAtIndexedSubscript:(indexType)idx; 

- (void)setObject:(elementType)object atIndexedSubscript:(indexType)idx;

Dictionary

- (elementType)objectForKeyedSubscript:(keyType)key; 

- (void)setObject:(elementType)object forKeyedSubscript:(keyType)key;




Segues

xcode 4.5的storyboard提供了更方便的segue方法。

当你要实现按cell中的箭头实现segue时。以往都要用代码来实现。xcode4.5中提供了直接在storyboard中链接的方法





Unwind Segues

有了Unwind segues,你可以很容易就实现segue到你制定的一个View上。




你要在制定目标的controller中实现以下两个方法。

-(BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender

{

    return YES;

}

(默认YES)


- (IBAction)done:(UIStoryboardSegue *)segue

{

    // React to the impending segue

    // Pull state back, etc.

}


CollectionView

下面这幅图就是用Collection Views实现的一个照片墙显示。


类似于瀑布流的展示方法。


为什么要使用Collection Views呢?

 

可以高度定制内容的展现

 

 

管理数据最佳的做法

 

■ 即使是处理大量数据,也非常的高效


对于CollectionView主要要实现的方法有三个

UICollectionViewDataSource

●section的数量 

-numberOfSectionsInCollection:

●某个section里有多少个item 

-collectionView:numberOfItemsInSection:

●对于某个位置应该显示什么样的cell 

-collectionView:cellForItemAtIndexPath:


embed segue

在以往的xcode中,如果我们想要添加一个子视图,我们需要用代码实现。


UIViewController *child =

  [[self storyboard] instantiateViewControllerWithIdentifier:@"ContentScene"];

[self addChildViewController:child];

[[self view] addSubview:[child view]];

[[child view] setFrame:frame];


现在在storyboard多了container view这个控件,可以让你不用代码实现添加一个子视图。




你可以在

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

中实现参数的传递。

方法顺序

如果有以下代码:

@interface SongPlayer : NSObject 
- (void)playSong:(Song *)song; 
@end 

@implementation SongPlayer 
- (void)playSong:(Song *)song { 
    NSError *error; 
    [self startAudio:&error]; 
    ... 


- (void)startAudio:(NSError **)error { ... } 
@end

在早一些的编译环境中,上面的代码会在[self startAudio:&error]处出现一个实例方法未找到的警告。由于编译顺序,编译器无法得知在-playSong:方法之后还有一个-startAudio:,因此给出警告。

在新编译器里,如果在同一实现文件中,无论方法写在哪里,编译器都可以在对方法实现进行编译前知道所有方法的名称,从而避免了警告。

枚举改进

从Xcode4.4开始,有更好的枚举的写法了:

typedef enum NSNumberFormatterStyle : NSUInteger {

    NSNumberFormatterNoStyle, 

    NSNumberFormatterDecimalStyle, 

    NSNumberFormatterCurrencyStyle, 

    NSNumberFormatterPercentStyle, 

    NSNumberFormatterScientificStyle, 

    NSNumberFormatterSpellOutStyle 

} NSNumberFormatterStyle;

. Maps

替换Google Map为苹果自行研发3D地图

2. Social Network

集成新浪微博,Facebook , Twitter等社交网络帐号管理。 < Social.framework >

3. Pass Kit

提供通行证SDK,可以此为基础开发电子通行证甚至实体物理票务。

4. Game Center

可调用GKChallenge函数发起游戏挑战;authenticateHandler保存服务端验证信息;支持超时设置;GKAchievement可同时提交多个成就信息。

5. Reminder

Event Kit framework提供可定制提醒服务。

6. In-App Purchase(内置商店):

支持可下载商品,苹果将提供相应服务端存储。  < SKDownload class - StoreKit.framework >

7. Collection Views

新增UICollectionViewController,支持更便捷的自定义Layout。

8. UI State Preservation (界面状态保留)

IOS6.0中,State preservation提供保存界面状态方案。这样即使应用进程被结束,重新打开时仍可让用户感觉界面没有变化。

9. Auto Layout

以“springs and struts”Model 为基础的自动布局,用于:

a. 本地化

b. 支持right-to-left 语言

c. 更好的管理view与controller

10. Data Privacy (数据隐私中心)

a. 通讯录

b. 日历

c. 提醒

d. 相册

第三方应用访问以上项目前,用户将被提示授权。Info.plist可定制访问这些项目时给用户的描述。

Note:应用若被拒绝授权,将收到Null数据,须做好相应流程管理。

 

Additional Framework Enhancements  ( 框架增强 ) 

一.  UIKit Framework:

UIImage:新初始化方法,可设置scale参数

支持自定义界面: UIBarButtonItem, UIPageControl, UIPageViewController, UISwitch, and UIStepper

UITableView:新成员变量UITableViewHeaderFooterView来设置header, footer

UITableViewController:支持内置刷新按钮-UIRefreshControl

UIWebView:提供禁止访问额外隐藏内容的方法

**UIViewController:

全新的更简洁的屏幕旋转管理方法 (极度坑爹,跟原先完全不同)

UINavigationBar:可subclass了..

二. OpenGL ES:

GL_EXT_texture_storage,      GL_APPLE_copy_texture_levels, GL_APPLE_map_buffer_range, GL_APPLE_sync, GL_APPLE_shader_framebuffer_fetch

三. Media Player Framework

增加MPVolumeView:用于自定义音量条

四. Image IO Framework:

可查询EXIF及IPTC,得到图片的拍摄信息 (光圈,焦距,曝光时间) (相关类:CGImageSourceRef, CGImageDestinationRef)

五. iAd Framework

广告Banner支持一个在iPad上的新尺寸。

六. Foundation Framework:

1. NSFileManager:支持云管理

2. NSUUID类:支持开发者自行生成需要的UUID

3. NSURLRequest:允许开发者设定某request在多元网络环境下是否被允许。

4. NSString 新增转大小写的方法,哦耶~

七. External Accessory Framework:

新增一个华丽丽管理蓝牙设备连接的界面:显示可用蓝牙设备列表。

八. Event Kit Framework:

优化提醒,日历管理。

九. Core Video Framework:

支持2种新像素级格式,以提供OpenGL ES相关更高效的one-channel, two-channel图像存储。

十. Core Media Framework

新增CMClockRef, CMTimebaseRef类型。

十一. Core Location Framework (地理位置框架)

1. 当用户在指定时间内未移动,通过设置pausesLocationUpdatesAutomatically来暂停地理位置传送,以节省电量。

2. 设置 activityType来区分driving usage 和 fitness usage

十二. Core Bluetooth Framework

蓝牙设备支持外围模式(peripheral mode), 之前只支持中心模式(central mode)。

十三. Core Audio

1. AUDeferredRenderer音频单元,允许以低优先级线程模式,进行更频繁的音频切片。

2. AudioQueueProcessingTap:允许截获音频队列上的数据,并处理它,你懂的^^。

十四. AV Foundation Framework

AVPlayer更好的支持网络流媒体 etc..

十五. Ad Support Framework 

提供用于标识App广告客户端的新方案(干掉UDID后的新招,貌似CFUUID)。

十六. Accelerate Framework 

新增vDSP, SSE, etc ..


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值