1、线程两种方式:
//1、新开启一个线程
[NSThread detachNewThreadSelector:@selector(test) toTarget:self withObject:nil];
//2、GCD线程
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
size_t number = 100;
dispatch_async(queue, ^{
dispatch_apply(number, queue, ^(size_t iteration) {
});
});
2、双击事件被单击事件拦截
[singleTap requireGestureRecognizerToFail:doubleTap];
3、调试时获取类名
DLOG(@"%@",NSStringFromClass([vc class]));//通过类获取类名
DLOG(@"%@",NSClassFromString(@"DiscoverViewController"));//通过类名获取类
4、KVO,“一对一”对象之间的通信,例子如下:
#import <Foundation/Foundation.h>
@interface StockData : NSObject
@property(nonatomic,strong) NSString *stockName;
@property(nonatomic,assign) float price;
@end
#import "StockData.h"
@implementation StockData
@end
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
- (IBAction)btnAction:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *labShow;
@end
//
// ViewController.m
// A
// KVO例子
// Created by cs on 15/6/7.
// Copyright (c) 2015年 dwen. All rights reserved.
//
#import "ViewController.h"
#import "StockData.h"
@interface ViewController (){
StockData *stock;
UILabel *_lab1;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
stock = [[StockData alloc] init];
[stock setValue:@"中展" forKey:@"stockName"];
[stock setValue:@"100.0" forKey:@"price"];
[stock addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
_labShow.text = [NSString stringWithFormat:@"%@",[stock valueForKey:@"price"]];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (IBAction)btnAction:(id)sender {
//设值
[stock setValue:@"20.0" forKey:@"price"];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
if ([keyPath isEqualToString:@"price"]) {
_labShow.text = [NSString stringWithFormat:@"%@",[stock valueForKey:@"price"]];
}
}
- (void)dealloc{
//TODO 清空释放掉
[selfremoveObserver:selfforKeyPath:@"price"context:nil];
}
@end
5、instancetype和id区别:
相同点:都可作为方法的返回类型
不同点:
一、instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型对象。
二、instancetype只能作为返回值,不能像id那样作为参数
6、UImage防止拉伸设置
UIImage *selectImg = [UIImage imageNamed:@"select-checked"];
UIEdgeInsets insets = UIEdgeInsetsMake(0, 0, 0, 30);
selectImg = [selectImg resizableImageWithCapInsets:insets];
[btn setBackgroundImage:selectImg forState:UIControlStateNormal];
7、ios中的时间毫秒,long型
NSNumber *createAtN = [dicPushBody objectForKey:@"createAt"];
long createAt = [createAtN longValue];
8、获取年、月、日
NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:now];
int year = (int)[dateComponent year];//年
9、url schemes 可在Safari浏览器中打开应用。前提是需在工程中plist文件中配置下
配置好后,刷到真机上。然后在Safari地址中输入:artgoer://com.test 就可打开应用。
10、设置tabBar背景色
self.tabBar.barTintColor = [ColorUtilcolorFromHexRGB:@"#000000"];//设置tabBar背景色
11、block回传参数应用示例:
block适合两个页面之前传值,不适合页面乘积深时,回传参数。
AddressManageViewController.h文件
//定义block
typedef void (^AddressManageBlock) (AddressVo *addressVo);//回传参数
@interface AddAddressViewController : UITableViewController
//声明block
@property (strong, nonatomic) AddressManageBlock addressBlock;
@end
AddressmanageViewController.m文件
if (self.addressBlock) {
self.addressBlock(aVo);
[self.navigationController popViewControllerAnimated:YES];
}
SettlementViewController.m文件
//地址管理
- (void) goAddressManageAction{
AddressManageViewController *addressVc = [StoryboardUtil getVCWithSbIden:@"My" identify:@"AddressManageViewController"];
addressVc.scourceType = NSStringFromClass([SettlementViewController class]);
[self.navigationController pushViewController:addressVc animated:YES];
addressVc.addressBlock = ^(AddressVo *aVo){
//TODO
self.addressVo = aVo;
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
};
}
12、滑动返回上一页。在push后添加如下代码。
GoodsDetailViewController *goodsDetailVC = [StoryboardUtil getVCWithSbIden:@"Goods" identify:@"GoodsDetailViewController"];
[self.navigationController pushViewController:goodsDetailVC animated:YES];
//TODO滑动返回
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
12、把view添加到Window上
UIWindow *win = [[UIApplication sharedApplication].delegate window];
[win addSubview:self.view];
13、导航titleView添加自定义View
UIView *titleV = [[UIView alloc] init];
titleV.frame = CGRectMake(0, 0, 120, 44);
_btnTopic = [UIButton buttonWithType:UIButtonTypeCustom];
[_btnTopic setFrame:CGRectMake(0, 0, 50, 40)];
[_btnTopic setTitle:@"专题" forState:UIControlStateNormal];
_btnTopic.titleLabel.font = [UIFont boldSystemFontOfSize:18.0f];
[_btnTopic setTitleColor:WordTextColor forState:UIControlStateNormal];
[titleV addSubview:_btnTopic];
_btnDisplay = [UIButton buttonWithType:UIButtonTypeCustom];
[_btnDisplay setFrame:CGRectMake(70, 0, 50, 40)];
[_btnDisplay setTitle:@"展览" forState:UIControlStateNormal];
_btnDisplay.titleLabel.font = [UIFont boldSystemFontOfSize:18.0f];
[_btnDisplay setTitleColor:TitleColor forState:UIControlStateNormal];
[titleV addSubview:_btnDisplay];
self.navItem.titleView = titleV;
14、循环布局约束
for (NSLayoutConstraint *lc in headView.lcSpace) {
lc.constant = 10;
}
15、图片保存到相册
//图片保存到相册
UIImageWriteToSavedPhotosAlbum(lastImg, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);
- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{ NSString *message;
if (!error) {
message = @"成功保存到相册";
[self showStrAlert:@"成功保存到相册"];
}else
{
[self showStrAlert:[NSString stringWithFormat:@"%@",error]];
}
}
16、读取ttf文件字体:
-(UIFont*)customFont{
NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"209" ofType:@"ttf"];
NSURL *url = [NSURL fileURLWithPath:fontPath];
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url);
if (fontDataProvider == NULL)
return nil;
CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider); CGDataProviderRelease(fontDataProvider);
if (newFont == NULL) return nil;
NSString *fontName = (__bridge NSString *)CGFontCopyFullName(newFont);
//....
NSData *data =[fontName dataUsingEncoding:NSUTF8StringEncoding];
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString* temp = [[NSString alloc] initWithData:data encoding:encoding];//data为NSData类型
NSLog(@"fontName======%@==%@",fontName,temp);
UIFont *font = [UIFont fontWithName:fontName size:12];
CGFontRelease(newFont);
return font;
}
17、指定页面禁止侧滑返回:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// 禁用返回手势
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
//开启返回手势,解决侧滑返回时需跳到指定页面
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
}
18、iOS懒加载
//定义
@property (nonatomic,strong) NSMutableArray *dataArr;
//注意
//...在第一次使用时用self.dataArr,而不能用_dataArr,否则不会产生对象
//...当程序进来时不会产生dataArr对象,只有当第一次self.dataArr调用时,这时会走get方法。可以节省不少内存空间。实例化用懒加载是个不错选择
#pragma mark Getter
- (NSMutableArray *) dataArr{
if (!_dataArr) {
_dataArr = [[NSMutableArray alloc] init];
}
return _dataArr;
}
19.UIButton显示图片和文字,呈上下排列,图片显示上方,文字显示下方。
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake((ScreenWidth/4)*i, 5, ScreenWidth/4, 110);
[btn.titleLabel setFont:[UIFont systemFontOfSize:15]];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[btn setTitle:vo.label forState:UIControlStateNormal];
btn.titleLabel.textAlignment = NSTextAlignmentCenter;
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(btn.imageView.frame.origin.x+32, btn.imageView.frame.origin.y+20, 30, 30)];
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:vo.labelPic]];
UIImage *img = [UIImage imageWithData:data];
[imageView setImage:img];
[btn addSubview:imageView];
//关键代码
btn.titleEdgeInsets = UIEdgeInsetsMake(28, 0, 0, 0);
btn.imageEdgeInsets = UIEdgeInsetsMake(-15,25,0,0);
- 大小: 30.9 KB
分享到:
相关推荐
《iOS基础学习:英文PPT解析》 iOS开发是当今移动应用开发领域的重要一环,尤其对于想要进入这个领域的初学者来说,掌握基础知识至关重要。这份"iOS学习PPT"(英文版)是一份宝贵的资源,它系统地介绍了iOS开发的...
iOS安全学习笔记的知识点涵盖了多个方面,从学习资料的搜集到优秀博客文章和GitHub资源的整理,这为iOS安全研究者提供了一个丰富的资源库。以下是对上述内容中提及知识点的详细说明: 1. iOS安全学习资料汇总 首先...
3. **数据管理**:iOS开发中的数据存储包括SQLite数据库、Core Data和UserDefaults。了解如何有效地存储和检索数据对于应用程序的性能至关重要。 4. **网络编程**:iOS应用往往需要与服务器进行交互,因此需要掌握...
在iOS学习之旅中,开发者需要掌握一系列技术和工具,才能创建出色的应用程序。以下是一条详细的iOS学习路线,帮助你从入门到精通。 首先,你需要熟悉基础的编程语言。iOS开发主要使用Swift,这是一种由Apple推出的...
在iOS学习的过程中,掌握各种资源和工具的获取途径是非常重要的,因为这可以帮助开发者迅速找到所需的教程、代码示例以及文档,从而提升学习效率。以下是一些关于iOS学习资料下载的网址,涵盖了数据保存、游戏开发...
iOS学习完整路线图,C语言、Objective-C、iOS基础、iOS高级、游戏开发
在iOS开发中,"流水布局"(Waterfall Layout)是一种常见的UI设计模式,它通常用于展示商品列表或者图片网格,让界面看起来更有层次感和...通过学习和分析这个demo,开发者可以更好地理解和掌握iOS中的高级布局技巧。
【iOS学习总结】 在iOS开发领域,这是一份个人学习经验的总结,涵盖了从入门到进阶的关键知识点。iOS开发主要使用Swift编程语言,这是一种由Apple公司推出,旨在提升开发效率,同时保持代码简洁和安全的语言。Swift...
为了学习ios编程,自己设计了一个账本的小程序,功能如下: 1,成员列表:显示所有成员,添加成员,删除成员,交费,查询个人消费详情。 2.添加消费:消费信息,消费人员,消费金额, 3.消费清单:根据开始和截止日期...
在iOS学习过程中,掌握iOS 5这一版本的知识至关重要,因为它是iOS发展史上的一个重要里程碑,引入了许多创新功能和改进。以下是一些关于iOS 5学习的关键知识点: 1. **通知中心(Notification Center)**:iOS 5...
Objective-C编程之道:IOS设计模式解析.pdf
本压缩包“ios学习资料打包”提供了两个核心的学习资源:“Objective-C.2.0程序设计.pdf”和“一步一步学习iOS5编程第二版.pdf”,旨在帮助开发者系统地掌握Objective-C和iOS开发的基本概念和实践技巧。 1. **...
这份资源包含了丰富的playground文件,旨在帮助学习者通过实践来深入理解iOS开发的关键概念和技术。Playgrounds在Xcode中是一种强大的工具,允许开发者即时查看代码效果,无需完整构建应用程序,从而加速学习进程。 ...
【标题】"IOS学习PPT"揭示了这个压缩包的核心内容是关于iOS开发的学习资源,主要以PPT的形式呈现。这种格式通常用于教学或讲座,便于条理清晰地讲解复杂概念和技术。 【描述】中提到的几个关键知识点如下: 1. **...
ios应用开发学习的好资料,很好的学习资料
这个压缩包文件包含了一个大学生毕业设计的完整项目实训,它是一个基于Ionic框架开发的手机应用APP,名为“流水账app”。这个应用旨在帮助用户记录日常生活中的收支情况,提供便捷的财务管理功能。下面是关于这个...
3. **UIKit框架**:UIKit是iOS应用程序用户界面的主要构建块。学习如何使用UIViewController、UIView、UILabel、UIButton等控件来设计和实现用户交互界面。 4. **Storyboard和Auto Layout**:Storyboard用于可视化...
ios学习网址,初学入门必备,把整套学完基本上就可以正式进入开发了。
在本《学习iOS基础教程电子书(1)》中,主要涵盖了针对iOS开发初学者的基础知识,旨在帮助读者系统地理解和掌握iOS应用开发的核心概念。这本书的起点是为那些对编程有一定了解,但对iOS平台尚属陌生的读者设计的。...