自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 收藏
  • 关注

原创 【无标题】

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { self.headerImageView = [[UIImageView alloc] .

2021-11-18 10:38:26 1304

原创 runtime和动态绑定

我们都知道OC是动态语言,表现为对象方法的调用实际上是对对象发送消息,编译时不确定这个对象执行什么方法,而在运行时由消息(方法选择器selector决定对象执行什么方法),这种消息发送的方式叫做动态绑定oc是一门动态语言,它允许操作在运行的时候才执行oc的这种特性是基于runtime实现的,runtime底层是由c语言编写,oc编写的代码在执行的时候最终都会转化成runtime api进行运行。oc的消息转发机制在调用对象的方法的时候,编译器会转化为objc_msgSend(obj, @se

2021-11-03 17:54:44 1335

原创 ios基础概念

load和initalizeload是类的加载,在应用程序的生命周期内只会调用一次,而且是先执行父类的load方法再执行子类的load方法,load方法是根据方法的内存地址调用的init是在类第一次接收到消息的时候调用的,每个类初始化一次他的父类的initalize方法就会调用一次,也是先调用父类再调用子类,initalize是通过objc_msgSend调用的,子类没有实现会调用父类的,分类实现了会覆盖父类的深拷贝和浅拷贝深拷贝:创建一个新的指针,并开辟新的内存空间,内容拷贝自原指针指向的

2021-10-27 14:13:06 1523

原创 ios线程锁

首先说一下线程锁死的概念一个比较常见的死锁例子:主队列同步- (void)viewDidLoad { [super viewDidLoad]; dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"deallock"); });}同步对于任务是立刻执行的,那么当把任务放进主队列时,它就会立马执行,只有执行完这个任务,viewDidLoad才会继续向下执行。而viewDidLoad和任务都是在主队列上的

2021-10-22 12:03:55 332

原创 GMSMapView(google地图)上的GMSMarker(大头针)改变位置,添加动画

//地图的初始化位置 GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:34.223817 longitude:108.88056 zoom:1.0];//添加地图GMS.

2021-10-20 15:10:24 1246

原创 ios面试常用

1.mvc和mvvm的区别mvc:是model -view-controllermodel持有数据view负责将数据展示给用户并接收用户的事件controller负责将model和view关联起来,当model发生变化时controller可以通过Nsnotification或者KVO来进行监听然后通知view进行相应的改变,view发生变化时controller可以通过delegate或者block来进行监听然后相应的改变modelmvvm:是model-view-viewmodel.

2021-10-19 10:26:32 103

原创 ios面试常用问题总结

1、属性修饰符1、strong :强引用,只能用来修饰对象,属性的默认修饰符,其修饰的的对象引用计数加一2、weak :弱饮用,只能用来修饰对象,修饰的对象引用计数不增加,可以避免循环引用,weak修饰的对象被释放后,指针会被置为nil,此时向对象发送消息不会崩溃3、assign:可修饰对象和基本数据类型,其修饰的对象引用计数不增加,当对象被释放后,指针不会置为nil,这时就会产生野指针,此时向对象发送消息会崩溃。所以assign通常修饰基本数据类型,因为基本数据类型存储在栈区,先进先出,基本数

2021-10-08 10:48:53 132

原创 Xcode全局断点异常捕获

1.首先设置全局异常捕获如下图所示2.添加全局断点选择底部的“+”, 单击Add Symbolic Breakpoint..., 输入-[NSException raise],然后按Done键。最终设置好的如下图所示,这样就可以快速定位到程序崩溃异常的位置...

2021-07-21 11:05:35 635

原创 iOS app集成使用 Facebook 深度链接

1.首先需要集成facebook的FBSDKCoreKit库(pod 'FBSDKCoreKit')在didFinishLaunchingWithOptions中初始化facebook sdk并设置深度链接- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ //此代码在您的应用启动时初始化SDK,并允许.

2021-07-16 10:43:25 2221 3

原创 一些好用的在线工具

1.在线PS网址:https://www.uupoop.com 可以实现ps软件的所有功能,网页版ps软件 2 .免费在线作图网址:https://processon.com 支持流程图、思维导图、原型图、UML、网络拓扑图、组织结构图等 3.图片无损压缩网址:https://tinypng.com 无损压缩网站图片,加快网站的响应速度,支持多传,操作简单,压缩效率高 4.图片无损放大网址:https://bigjpg.com 将图.

2021-07-02 10:05:17 91

原创 pod 一些常用的第三方库

pod 'EasyDarkMode/Core' #import <EasyDarkMode/EasyDarkMode.h> //暗黑适配pod 'WSProgressHUD', '~> 1.1.0' #import "WSProgressHUD.h" //加在框和toast

2021-04-22 14:29:15 244

原创 pod 时的一些问题

如图,pod导入FBAudienceNetwork一直超时解决方案:在电脑挂了vpn的情况下,在终端执行一下命令export https_proxy=socks://127.0.0.1:1080重新pod

2021-04-22 09:35:39 688

原创 git 添加.gitignore文件 并添加忽略

一、创建Git 的.gitignore 1 、cd 到要创建.gitignore的项目目录下 2、执行以下命令创建.gitignore文件 touch .gitignore 3、执行以下命令就会显示所有的隐藏文件,在当前的项目目录下就可以看到.gitignore文件 defaults write com.apple.finder AppleShowAllFiles Yes &a...

2021-03-26 09:53:46 1264

原创 oc项目pod导入带swift的库报错

解决办法在Podfile文件里添加use_frameworks!如下图

2021-03-25 17:45:49 464

原创 iOS block中self wself strongSelf

1.当blcok的生命中期在self的生命周期内 ,在block内部使用self是没有问题的,因为当self释放时,block中对self的强引用已经释放掉了dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self doSomething]; });2.当block的生命周期没有在self的生命周期内__weak __typeof__(self) weakSelf = sel

2021-01-21 16:02:46 247

原创 使用MJExtension进行字典模型转换

第一步:pod 'MJExtension'第二步:#import <MJExtension/MJExtension.h>第三步:如果返回的字典中的key与model中的属性不对应在model的.m文件中加入以下代码+(NSDictionary *)mj_replacedKeyFromPropertyName{ return @{ @"userId" : @"id", };}第四步:如果要处理字典中的返回值,在model的.m文件中实现对应属.

2021-01-16 11:34:32 1576

原创 UITextView 设置行高 并限制字数 并在键盘遮挡时向上移动

//首先添加监听 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:) name:@"UITextViewTextDidChangeNotification" object...

2021-01-08 16:45:13 477

原创 UItextField限制输入长度

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];- (void)textFieldDidChange:(UITextField *)textField{ UITextRange *selectedRange = [textField markedTextRange]; // 获取高亮部分, UITe...

2021-01-08 16:39:47 485 1

原创 iOS WebSocretch长链接

使用SocketRocket 进行websocket长连接我使用的是pod管理库 所以在podfile中加入 pod 'SocketRocket'在使用命令行工具cd到当前工程 安装 pod install打开使用[[SocketRocketUtility instance] SRWebSocketOpenWithUrlStrig:@"写入自己后台的地址"];关闭使用[[SocketRocketUtility instance] SRWebSocketClose];打开成功会收.

2020-12-31 17:45:37 110

转载 iOS之更新cocoapod版本

一、检测gem版本gem -v如果要是低于小于2.6.x,更新gem指令:gem update --system二、将ruby源切换回国内的 gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/三、查看是否切换到国内ruby源gem sources -l四、更新cocoapodsgem install cocoapods -n /usr/local/bin报

2020-12-28 17:13:07 857

原创 mac安装cocoapods流程

Mac中安装CocoaPods步骤,首先安装RVM,然后安装Ruby, 最后安装cocoaPods第一步:安装rvm 命令行如下curl -L get.rvm.io | bash -s stable但是安装rvm的时候可能会出现 :Failed to connect to raw.githubusercontent.com port 443: Connection refused解决方法如下1:打开访达 在菜单栏找到 前往->前往文件夹2:输入 /etc/ 点击前往3:找到.

2020-12-26 03:42:08 2496 2

原创 runloop和线程、autolesaePool之间的关系

线程与runloop之间的关系:每一个线程,包括主线程,都会拥有一个专属的 NSRunLoop 对象,并且会在有需要的时候自动创建每当一个app启动时会创建一个默认线程(即主线程),主线程的runloop会自动注册两个observe观察者第一个observe会观察enter事件,当有enter事件时(即进入runloop),会调用_objc_autoreleasePoolPush()创建自动释放池第二个observe会观察两个事件,BeforeWaiting(准备进入睡眠) 和 Exit(即.

2020-12-17 12:19:25 462

原创 KVC KVO原理和应用--监听AVPlayer的AVPlayerStatusReadyToPlay状态

KVO:Key-Value Observing(KVO观察者模式)它提供一种机制,当指定的对象(下文中的status)的属性被修改后,则对象就会接受到通知。//添加KVO监听 [self.player addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];//处理KVO监听 当self.player的状态status变化时回调- (void)observeVal..

2020-12-03 17:05:11 1213

原创 runloop UITableView上添加NSTimer,UITableView滚动导致NStimer不执行

因为UITableView滚动的时候跟主线程不是同一个runloop mode,每次执行runloop,都需要指定一个mode。UITableView滚动时候由于不同的mode所以也导致它只能保证它所在的runloop的timer有效,而主线程无效。什么是 Runloop?是一个与线程相关的机制,可以理解为一个循环,在这个循环里面等待事件然后处理事件.而这个循环是基于线程的,在Cocoa中每个线程都有它的runroop,通过他这样的机制,线程可以在没有事件要处理的时候休息,有事件运行,减轻CPU压.

2020-12-03 16:17:15 223

原创 Nsstring去掉首位空格和换行,中间多个换行只展示一次换行,UItextview和UItextField限制输入字数

//Nsstring去掉首位空格和换行,中间多个换行只展示一次换行+ (NSString *)filterBlankAndBlankLines:(NSString *)str{ NSMutableString *Mstr = [NSMutableString string]; str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; //去除掉首尾的...

2020-12-01 16:36:08 315

原创 隐藏SFSafariViewController的头尾导航

SFSafariViewController *safariVc = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:@"http://xxxxxx"]]; //隐藏 头尾导航 [safariVc performSelector:NSSelectorFromString(@"_setShowingLinkPreviewWithMinimalUI:") withObject:[NSNumber num...

2020-11-30 20:48:30 942

原创 ios内购如何修改首选币种

进入iTunes后台 点击右上角账号

2020-08-04 17:07:07 1317

转载 如何查看app被拒历史信息

有时候向苹果市场提交一个app,被拒了,看到了审核人员给我们提供的信息,这个信息是在iTunes Connect解决方案中心显示的,关掉之后却不知道怎么再打开了。办法是替换下面链接中的thisisyourappid为你待提交app的app id再打开链接就行了https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/ng/app/thisisyourappid/platform/ios/resolutioncenter...

2020-08-04 15:37:26 1225

原创 微信抓包工具下载流程

前往 :https://developers.weixin.qq.com/doc/点击第四步,下拉页面找到第五步

2020-05-11 12:43:05 3368

原创 ios开发 windows系统申请证书,以及上传ipa到itunes connect提交审核

APP开发助手(Application Loader跨平台版)工具下载地址:http://www.appuploader.net/使用教程:https://segmentfault.com/a/1190000022553058

2020-05-09 10:16:23 381

原创 苹果2020年4月份停止接受使用UIWebview api 的app

苹果2020年4月份停止接受使用UIWebview api 的app第一步全局搜索UIWebview ,将相关代码删除或者替换但是第一步不能检测到.a 文件或者一些没有添加到项目目录中的文件中是否使用UIWebview api 现在就需要第二步第二步①从终端cd到要检查的项目根目录②grep -r UIWebView .以上两步就可以检测出项目中的.a文件中是否调用到U...

2020-03-14 21:26:18 7635 2

原创 手动添加第三方sdk后 unknown type name 'Nsstring'

很头疼,虽然将Compile Sources As 改为 Objective-C++这种方式很可行,但是会造成我的sdk里面其他报错需解决。找了很久,发现一个解决办法:http://stackoverflow.com/questions/19723392/adding-c-file-causes-pch-error应该是pch文件预编译的问题,也就是说,把foundation以及uikit...

2019-11-27 18:04:53 176

原创 uitableview添加手势拖动悬停

实现uitableview 在一定范围内可以拖动 ,拖动到最顶部或最底部时可以内部滑动首先我们定义一个HJGestureTable 继承自UITableView 并实现如下方法// 允许处理多个手势- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimulta...

2019-11-26 18:30:24 573

原创 ios手势拖动

UIPanGestureRecognizer *pan=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan:)]; [self.pushToHomeButton addGestureRecognizer:pan]; #pragma mark - 手势执行的方法-(vo...

2019-11-25 16:14:42 208

原创 苹果最新规则:苹果开发者账号被调查

Hello,We are unable to continue this app’s review because your Apple Developer Program account is currently under investigation for not following the App Store Review Guidelines’ Developer Code of C...

2019-09-28 10:12:50 3748

原创 ios block和枚举用例

block写法.h 声明@property (nonatomic ,copy) void (^successfulChongZhi)(NSInteger state);.m中赋值self.successfulChongZhi(1);其他界面中调用blockview.successfulChongZhi = ^(NSInteger state) { swit...

2019-07-30 10:02:20 194

原创 文字上下轮播 ,自定义cell上下轮播

gitHub地址:https://github.com/tangmengbo/RollingNotice.gitios开发技术,提交审核讨论群加qq群:695614778 一起讨论

2019-07-10 18:03:22 350

原创 git上的一些Demo

1.验证码分割输入框https://github.com/tangmengbo/FenGeshuRuKuang2.SVGA动画播放demohttps://github.com/tangmengbo/SVGADemo3.UITabbarController vc切换时添加动画效果https://github.com/tangmengbo/TabBarController--....

2019-06-21 15:39:27 131

原创 git 基本操作

往coding上初次上传项目流程1、首先在coding创建项目,创建后再- -代码-获取访问的https2、克隆$ cd /WorkSpace // 找个放空项目的地方$ git clone https://coding.net/yourusername/projectname.git //克隆3、把现有的项目文件拷贝到克隆下来的文件夹内4、提交$ cd projectname /...

2019-05-30 09:52:42 87

原创 苹果内购商品信息获取

- (void)viewDidLoad{[super viewDidLoad]; NSArray * productArray = [[NSArray alloc] initWithObjects:@"com.xxx.xxx",@"com.xxx.xxx",@"com.xxx.xxx",@"com.xxx.xxx",@"com.xxx.xxx",@"com.xxx.xxx, ni...

2019-05-18 15:02:28 3920

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除