http://fuckingblocksyntax.com
标签: OC
iOS/Iphone如何清除keychain
参见链接:
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); }
IOS控件缺陷之UIActionSheet引起崩溃(IOS 7)
一、主要问题:UIActionSheet 的delegate是assign的。如果delegate先于ActionSheet释放。则会引起程序崩溃。
二、次要问题:在ViewDidLoad时调起UIActionSheet,也会引起崩溃,这个崩溃系统给的提示很充分,所以是次要问题。
(这两个情况都只在IOS7上发生)正确和错误示例请下载示例程序:TestActionSheetBug.zip
盗个图做ActionSheet示意图:
如何通过ALAssert获取相册原图
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; }
关于UIView的layout陷阱
1、父View的width设置为负数时。父View的Bound的x会自动变成负数。 之后再将父View的宽度设置为正常值,父View的Bound仍然不会恢复正常(且在UI查看器中显示正常)。此时向此view添加子view,子view不是从父View frame的(0,0)开始,两个View是左右错位的。(父hieght和子view的Bound的y值应该也是同理)
2、IOS8系统中,向UILabel添加子View会被UILabel遮挡(当UILabel的text为空时)、若设置text内容为英文可以恢复正常。设置text含中文时仍然不正常。应避免向UILabel添加子View。
IOS开发:关于使用Category的陷阱
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没有父类、关于这个我还没有测试。