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 ..


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值