摘要: 用这个命令clang -rewrite-objc main.m,将.m文件转换成.cpp文件,注意要先将目录定位到main.m所在的目录int main(int argc, const char * argv[]){ @autoreleasepool { //例如创建一个NSString对象,其内部是发送了2个消息,对alloc发送一个消息,对[[NSStringalloc]发送一个消息 [[NSString alloc] init]; } return 0;}// 转换之后的.cpp文件int main(int argc, const char * argv[]){ @aut... 阅读全文
posted @ 2013-11-25 17:33 yyh123 阅读(456) 评论(0) 推荐(0) 编辑
摘要: 1 @implementation Person 2 - (void)dealloc 3 { 4 NSLog(@"Person---dealloc"); 5 } 6 7 - (void)test 8 { 9 __unsafe_unretained Person *p = self;10 self.block = ^{11 //如果直接使用self.age,会造成内存泄漏,bloc会对它里面的对象进行强引用,而对__unsafe_unretained(或者__weak)修饰的对象不会进行强引用12 NSLog(@"%d", p.age)... 阅读全文
posted @ 2013-11-25 17:10 yyh123 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 1 实现NSURLConnectionDataDelegate的代理方法 2 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 3 NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 4 5 if([httpResponse respondsToSelector:@selector(allHeaderFields)]){ 6 NSDi... 阅读全文
posted @ 2013-11-25 15:49 yyh123 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 1 #pragma mark - 读取二维码 2 - (void)readQRCoder 3 { 4 // 1. 摄像头设备 5 AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 6 7 // 2. 设置输入 8 // 因为模拟器是没有摄像头的,因此在此最好做一个判断 9 NSError *error = nil;10 AVCaptureDeviceInput *input = [AVCaptureDeviceInp... 阅读全文
posted @ 2013-11-23 21:53 yyh123 阅读(583) 评论(0) 推荐(0) 编辑
摘要: 1 @implementation NSString (Helper) 2 3 /** 4 返回当前字符串对应的二维码图像 5 6 二维码的实现是将字符串传递给滤镜,滤镜直接转换生成二维码图片 7 */ 8 - (UIImage *)createQRCode 9 {10 // 1. 实例化一个滤镜11 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];12 // 1.1 设置filter的默认值13 // 因为之前如果使用过滤镜,输入有可能会被保留,因此,在使用滤镜之... 阅读全文
posted @ 2013-11-23 21:48 yyh123 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 1 一、UICollectionView和UICollectionViewController的用法 2 1.新建一个xib描述UICollectionViewCell(比如DealCell.xib),设置好resuse identifier(比如deal) 3 4 2.控制器继承UICollectionViewController 5 1> 注册xib 6 [self.collectionView registerNib:[UINib nibWithNibName:@"DealCell" bundle:nil] forCellWithReuseIdentifier: 阅读全文
posted @ 2013-11-14 22:38 yyh123 阅读(2612) 评论(0) 推荐(0) 编辑
摘要: 1 1、退回输入键盘 2 3 - (BOOL) textFieldShouldReturn:(id)textField{ 4 5 [textField resignFirstResponder]; 6 7 } 8 9 2、CGRect 10 11 CGRect frame = CGRectMake (origin.x, origin.y, size.width, size.height);矩形 12 13 NSStringFromCGRect(someCG) 把CGRect结构转变为格式化字符串; 14 15 CGRectFromString(a... 阅读全文
posted @ 2013-11-12 22:27 yyh123 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 1 Block的使用: 2 注意,block要用copy策略 3 @interface TGDealBottomMenu : UIView 4 5 @property (nonatomic, copy) void (^hideBlock)();//定义一个block 6 7 8 9 在TGDealBottomMenu.m文件中这样调用:10 注意:首先要判断是否为nil,如果不为空,再调用11 if (_hideBlock) {12 _hideBlock();13 14 }15 16 17 //如下所示,当block对象为成员变量时18 @interface ... 阅读全文
posted @ 2013-11-12 01:29 yyh123 阅读(391) 评论(0) 推荐(0) 编辑
摘要: //控件本身的宽高发生改变的时候就会调用该方法 1 - (void)layoutSubviews 2 { 3 // 一定要调用super 4 [super layoutSubviews]; 5 int columns = self.frame.size.width / kTitleW;//每一行要显示列数 6 for (int i = 0; i<_titles.count; i++) { 7 UIButton *btn = self.subviews[i]; 8 // 设置位置,x值与列号有关,y值与行号有关 9 ... 阅读全文
posted @ 2013-11-11 22:28 yyh123 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 1.获得项目中info.plist文件的内容1> [NSBundle mainBundle].infoDictionary2> 版本号在info.plist中的key:kCFBundleVersionKey2.自定义控制器的view重写loadView方法(不需要调用[super loadView])3.控制器view的高度和状态栏的关系创建控制器的view时,系统会检测状态栏是否显示* 如果有状态栏,那么控制器view的高度是460(iPhone5中是548)* 如果没有状态栏,那么控制器view的高度是480(iPhone5中是568)4.按钮的状态UIControlState 阅读全文
posted @ 2013-10-17 22:26 yyh123 阅读(205) 评论(0) 推荐(0) 编辑