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
分享到:
相关推荐
这个压缩包文件包含了一个大学生毕业设计的完整项目实训,它是一个基于Ionic框架开发的手机应用APP,名为“流水账app”。这个应用旨在帮助用户记录日常生活中的收支情况,提供便捷的财务管理功能。下面是关于这个...
"记一笔:最简约的流水账app - 简书.url"和"一周搞定TypeScript+Angular2+Ionic2 - 简书.url"是两个链接,分别指向关于如何构建一个简单的记账应用的教程和快速掌握TypeScript、Angular2和Ionic2的指南。这些资源...
内容概要:本文探讨了分布式电源(DG)接入配电网所带来的技术挑战及其解决方案。首先介绍了DG接入对配电网潮流分布和电压稳定性的影响,随后详细讨论了风光互补无功补偿技术的应用,旨在稳定电压和提高电能质量。接着,文章阐述了粒子群算法(PSO)在电气互联和故障点位定位中的应用,展示了其在优化电网拓扑结构和快速准确定位故障方面的优势。最后,通过Simulink建模和仿真实验,验证了所提出的方法和技术的有效性。 适合人群:从事电力系统研究、分布式电源集成、智能电网优化的专业人士,以及对相关技术感兴趣的工程技术人员。 使用场景及目标:适用于分布式电源接入配电网的设计与优化,特别是在解决电压波动、无功补偿不足和故障定位不准等问题时。目标是提升配电网的稳定性和效率,确保电力系统的可靠运行。 其他说明:文中提供了多个Matlab和Python代码示例,用于具体实现风光互补无功补偿、粒子群优化算法以及Simulink仿真模型,便于读者理解和实践。
内容概要:本文详细介绍了使用博途V15软件和1500系列PLC实现单部六层电梯控制系统的SCL编程方法及其梯形图实现。主要内容涵盖电梯的基本控制逻辑,如楼层升降、平层停靠、呼叫响应等。文中通过具体代码示例展示了如何定义关键变量、处理楼层呼叫信号、实现电梯运行和平层停靠逻辑。此外,还讨论了状态机的设计、方向决策算法以及开关门控制等重要环节。文章强调了SCL语言在处理复杂逻辑方面的优势,并对比了梯形图在故障诊断时的直观性。 适合人群:对工业自动化控制感兴趣的技术人员,尤其是熟悉西门子PLC编程的工程师。 使用场景及目标:适用于需要深入了解电梯控制系统编程原理和技术实现的人群。目标是帮助读者掌握SCL语言和梯形图在电梯控制中的应用,提高编程技能。 其他说明:文章提供了完整的代码片段和详细的解释,有助于读者理解和实践。同时提醒读者关注实际应用中的细节问题,如安全保护机制、信号防抖处理等。
内容概要:本文详细介绍了如何使用MATLAB/Simulink对全桥和半桥LLC谐振变换器进行仿真,涵盖驱动配置、谐振参数计算、软开关验证以及闭环控制等方面。首先,文章讲解了半桥LLC的基本配置,包括PWM生成、死区时间和谐振参数的设定。接着,讨论了全桥LLC的扩展及其相对于半桥的优势,如更宽的增益范围和更好的输入电压适应性。然后,深入探讨了软开关的验证方法,强调了ZVS(零电压开关)的重要性和实现方式。最后,介绍了闭环控制的设计思路,包括PID控制器的应用和参数调整技巧。 适合人群:从事电力电子设计的研究人员和技术工程师,尤其是那些希望深入了解LLC谐振变换器仿真和优化的人群。 使用场景及目标:适用于需要进行LLC谐振变换器仿真的项目,旨在帮助工程师掌握从基本配置到高级控制的完整流程,确保高效稳定的电源转换系统设计。 其他说明:文中提供了大量MATLAB代码片段,便于读者理解和实践。此外,还给出了许多实用的调试建议和注意事项,有助于避免常见错误并提高仿真成功率。
2025免费微信小程序毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS 讲解视频:https://www.bilibili.com/video/BV1BVKMeZEYr 技术栈:Uniapp+Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode+微信开发者工具。
2025免费微信小程序毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS 讲解视频:https://www.bilibili.com/video/BV1BVKMeZEYr 技术栈:Uniapp+Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode+微信开发者工具。
内容概要:本文详细介绍了同步发电机短路仿真和电弧仿真的重要性及其具体实现方法。首先讨论了同步发电机短路仿真的核心基础——派克变换,展示了如何利用Python进行派克变换的代码实现,并解释了短路电流的计算方法,包括次暂态电流、暂态电流和稳态电流。接着,文章探讨了电弧仿真的物理特性和数学模型,特别是经典的Mayr电弧模型,并给出了Matlab代码示例。此外,还提到了电弧在不同环境条件下的特性研究,如气压、湿度等因素对电弧的影响。最后,文章强调了这两种仿真在电力系统动态分析中的应用场景,特别是在评估短路故障对发电机及周边设备的影响方面的作用。 适合人群:从事电力系统研究的专业人士、电气工程师、高校师生及相关领域的研究人员。 使用场景及目标:适用于需要深入了解同步发电机短路和电弧仿真原理的研究人员和技术人员,旨在提高电力系统的安全性、可靠性,优化保护措施的设计。 其他说明:文中不仅提供了理论知识,还附带了具体的代码实现,便于读者理解和实践。同时,文章指出了仿真过程中可能出现的问题及解决方案,如数值稳定性问题和接口时序处理等。
2025免费微信小程序毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS 讲解视频:https://www.bilibili.com/video/BV1BVKMeZEYr 技术栈:Uniapp+Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode+微信开发者工具。
基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明,个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。 基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模
2025免费微信小程序毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS 讲解视频:https://www.bilibili.com/video/BV1BVKMeZEYr 技术栈:Uniapp+Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode+微信开发者工具。
内容概要:本文深入探讨了高速追剪飞锯系统的实现细节,特别是维伦通触摸屏和台达PLC之间的协同工作。触摸屏作为人机交互界面,允许操作员设置如切割长度、运行速度等参数,并通过与PLC寄存器的关联实现数据传输。台达PLC则负责执行复杂的电子凸轮追剪算法,确保切割过程的高精度和稳定性。文中还介绍了关键的PLC指令,如MC_GearIn和CAM_GEN,以及它们在速度同步和位置控制中的应用。此外,文章揭示了一些调试技巧和潜在问题,如数据类型对齐、补偿算法和参数调整方法。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些对PLC编程和人机界面设计感兴趣的人。 使用场景及目标:适用于需要理解和优化高速追剪飞锯系统的场合,旨在提高生产效率和产品质量。通过学习本文,读者可以掌握如何设置和调试此类系统,从而减少故障率并提升性能。 其他说明:文章不仅提供了理论知识,还包括了许多实用的操作建议和经验分享,有助于读者更好地应对实际工作中遇到的技术挑战。
内容概要:本文详细探讨了高速永磁同步电机(HSPMSM)在50000-100000rpm转速范围内的设计与仿真挑战。首先介绍了高速电机的应用背景及其面临的离心力和电磁损耗等问题。接着,通过具体实例展示了如何利用Maxwell软件进行电机的几何建模、材料设置、边界条件与激励设置,并进行了详细的模拟结果分析。文中特别强调了在极端转速条件下,如10万转时,电机内部的物理现象以及相应的优化措施,如采用碳纤维护套增强机械强度、调整损耗计算模型以提高精度等。 适合人群:从事电机设计与仿真的工程师和技术研究人员,尤其是对高速永磁同步电机感兴趣的从业者。 使用场景及目标:适用于希望深入了解高速永磁同步电机设计原理及仿真技巧的人群,旨在帮助他们掌握Maxwell软件的具体应用方法,解决实际工程中遇到的技术难题,如高转速下的电磁兼容性和机械可靠性问题。 其他说明:文章不仅提供了理论指导,还包括大量实用的操作步骤和代码示例,有助于读者快速上手并应用于实际工作中。此外,文中提到的一些特殊处理方式(如碳纤维护套的应用),为解决特定工况下的技术瓶颈提供了新思路。
浪潮英信服务器 SA5212M5 用户手册
内容概要:本文详细介绍了如何使用COMSOL进行放电电极击穿空气的仿真。首先构建了一个针尖电极和球头圆柱电极组成的模型,设置了静电和电流耦合的物理场,并进行了网格优化。通过参数化扫描和MATLAB脚本,计算不同间隙距离下的击穿电压,并利用Paschen曲线进行验证。同时探讨了电场强度在尖端的集中现象及其对击穿的影响,提出了改进网格质量和求解器设置的方法。最后,通过电场矢量图和电势分布图展示了仿真的结果。 适合人群:从事电磁场仿真、电气工程、等离子体物理等相关领域的研究人员和技术人员。 使用场景及目标:适用于需要精确计算电极间击穿电压和电场分布的研究项目,帮助设计高压设备和评估电极结构的安全性和可靠性。 其他说明:文中提供了详细的建模步骤和代码片段,便于读者复现实验结果。同时强调了网格质量、边界条件和求解器设置对仿真准确性的重要影响。
家居项目后端资源采用ssm架构
整理一线大厂面试题合集
牵牛花铅笔素材儿童教学课件模板
2024年的记录。
整理一线大厂面试题合集