推荐一个博客:http://blog.chinaunix.net/uid-24862988-id-3411921.html
详细讲解了如何自定义任务并加入runloop中。(普通任务,MachPort。。
推荐一个博客:http://blog.chinaunix.net/uid-24862988-id-3411921.html
详细讲解了如何自定义任务并加入runloop中。(普通任务,MachPort。。
http://fuckingblocksyntax.com
参见链接:
http://stackoverflow.com/questions/7142774/reset-an-iphone-apps-keychain
代码:
-(void)resetKeychain { [self deleteAllKeysForSecClass:kSecClassGenericPassword]; [self deleteAllKeysForSecClass:kSecClassInternetPassword]; [self deleteAllKeysForSecClass:kSecClassCertificate]; [self deleteAllKeysForSecClass:kSecClassKey]; [self deleteAllKeysForSecClass:kSecClassIdentity]; } -(void)deleteAllKeysForSecClass:(CFTypeRef)secClass { NSMutableDictionary* dict = [NSMutableDictionary dictionary]; [dict setObject:(__bridge id)secClass forKey:(__bridge id)kSecClass]; OSStatus result = SecItemDelete((__bridge CFDictionaryRef) dict); NSAssert(result == noErr || result == errSecItemNotFound, @"Error deleting keychain data (%ld)", result); }
一、主要问题:UIActionSheet 的delegate是assign的。如果delegate先于ActionSheet释放。则会引起程序崩溃。
二、次要问题:在ViewDidLoad时调起UIActionSheet,也会引起崩溃,这个崩溃系统给的提示很充分,所以是次要问题。
(这两个情况都只在IOS7上发生)正确和错误示例请下载示例程序:TestActionSheetBug.zip
盗个图做ActionSheet示意图:
1、前提你要确定ALAssert中带的是图片(因为也可能是视频)
[asset valueForProperty:ALAssetPropertyType] == ALAssetTypePhoto
2、获取原图:
- (UIImage *)getImage:(ALAsset *)asset { ALAssetRepresentation *representation = [asset defaultRepresentation]; CGImageRef resolutionRef = [representation fullResolutionImage]; UIImage *image = [UIImage imageWithCGImage:resolutionRef scale:1.0f orientation:(UIImageOrientation)representation.orientation]; return image; }
Category作为OC一个非常好用的特性、可以给已经存在的类添加新的方法。
项目中我为了给已有的一个图片展示模块增加一个右下角的“Gif”图示。于是想到了使用Category给UIImageView扩展出一个在右下角显示图示的方法,并且重写了ImageView的LayoutSubview方法,使图示始终保持在右下角。编译运行一切都正常进行。 直到我发现另一个地方的ImageView的子控件不听我操作,经过排查才发现是另一个文件中的ImageView也受了之前写的Category的影响,我才发现以下事实:
1、Category一旦定义、作用域是全局的、对当前应用的所有代码都起作用、无论你是否引用了Category的头文件。这就要求我们不要肆意使用Category、因为不知道会影响到什么意想不到的代码。
2、实现Category的时候尽量不要覆盖原有的方法、这样做有两个原因:
(1)、这样不能像子类一样调用父类的方法、并且容易引起意外(没有引入的地方也自动受这个Category影响。这样这些地方的原有方法的行为也会改变。
(2)、由于Category不能指定覆盖另一个Category中的方法。如果覆盖的是系统框架中实现的方法、内部有可能也是Category实现的、这样会产生未知的行为:到底是你覆盖了系统的、还是系统覆盖了你的。
PS:在另外一篇文章里看到说给NSObject写Category的时候要注意不能调用super、以为NSObject没有父类、关于这个我还没有测试。