OC基础知识
OC开发基础知识
赑屃王者
一个勤勤恳恳的码农
展开
-
iOS开发安全 - 防重签名、越狱、调试检测
发起请求之前判断是否存在代理,存在代理就直接返回,请求失败。检测包签名是否和已知自己签名一致。二次签名会篡改信息文件。原创 2023-07-18 16:14:28 · 1025 阅读 · 0 评论 -
iOS视图push的时候偶尔卡住,push不过去问题
遇到一个诡异的问题,我的根视图是Tabbar+navigation,在点击push到另外页面的时候,页面卡住了,导航栏的标题是下个页面的,view还是当前的,然后我按home键,在进入到应用,页面又正常了。原因是手势pop的问题. 当处在navi的根控制器时候, 做一个侧滑pop的操作, 看起来没任何变化, 但是再次push其它控制器时候就会出现上述问题了。这种情况是会出现在我们自定义的navigation中,因为继承自UINavigation后,原先的右划手势被禁掉了,而我们经常会加上一句话打开手势s原创 2021-06-03 09:40:47 · 714 阅读 · 0 评论 -
分类(category)和扩展(extension)
一、分类(category):1.1 概念:分类是OC中特有的语法,他标识一个指向分类的结构体的指针。使用分类可以在不进行子类化的情况下,为已经存在的类增加功能。原则上它只能增加方法,不能增加成员变量。1.2 作用:(1) 扩展替他人定义的类(即使你无法访问它们的源代码);(2) 代替子类(3) 将新类的实现代码分发给多个源文件注意:分类中添加“方法”,不能增加成员变量,因为分类的结构体指针中,没有属性列表,只有方法列表;如果分类中声明了一个属性,那么,那么分类指挥生成这个属性的set原创 2021-06-02 09:33:23 · 447 阅读 · 0 评论 -
获取iphone设备名称
####根据设备信息对应设备名称设备列表链接:https://www.theiphonewiki.com/wiki/Models####获取设备信息// 需要#import "sys/utsname.h" struct utsname systemInfo; uname(&systemInfo); NSString * deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF原创 2021-06-02 10:25:36 · 593 阅读 · 0 评论 -
iOS开发之textField和textView限制字数输入方法
###一、限制字数输入的方法####1.在UITextFieldDelegate的代理方法中可以限制输入- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ if (textField == self.TextField) { if (string.length == 0) retu原创 2021-06-01 10:27:47 · 1157 阅读 · 0 评论 -
OC对象内存布局与isa指针
类方法属于类对象 [NSString stringwithFormat:]实例方法属于实例对象 [str length]实例方法里 继可以调用实例方法也可以调用类方法。类方法里 可以调用实例方法也可以调用类方法。在实例方法里,self表示实例对象。在类方法里面,self表示类对象。类方法里 不可以访问成员变量。实例方法 可以访问成员变量。实例方法 实例对象调用。是否可以访问成员变量。原创 2023-07-31 10:49:51 · 140 阅读 · 0 评论 -
NSTimer循环引用的问题
问题简介在iOS中,NSTimer的使用非常频繁,但是NSTimer在使用中需要注意,避免循环引用的问题:self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];- (void)dealloc { [self.timer invalidate]; self.timer = nil;}由于原创 2021-06-03 09:39:22 · 134 阅读 · 0 评论 -
iOS开发之NSDecimalNumber货币计算
在iOS开发中,遇到和货币价格计算相关的,对计算精度要求比较高。使用float类型运算,经常出现误差。为了解决这种问题我们使用NSDecimalNumber。####一、基本算法1、字符串初始化为NSDecimalNumberNSDecimalNumber *number1 = [NSDecimalNumber decimalNumberWithString:@"123"];NSDecimalNumber *number2 = [NSDecimalNumber decimalNumberWithS原创 2021-06-02 09:27:17 · 672 阅读 · 0 评论 -
iOS开发之点击空白处退出键盘
###一、以前使用的退出键盘方法UIScrollView 上如果有UITextField的话,结束编辑(退出键盘)直接用touchesBegan方法无效,需要再给UIScrollView加一个分类,重写几个方法。- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [[self nextResponder] touchesBegan:touches withEvent:event]; [super touch原创 2021-06-01 10:58:34 · 925 阅读 · 1 评论 -
iOS开发之UITextView设置行间距
设置UITextView的行间距有多种方法###一、设置静态textview行间距UITextView不需要输入直接显示非常简单UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 100, 100, 200)]; textView.delegate = self; textView.text = @"大家好大家好大家好大家好这是一个测试text"; [self.view addSu原创 2021-06-01 10:41:45 · 2090 阅读 · 0 评论 -
iOS开发之创建pch文件
一、手动创建pch文件按住command+N,弹出创建窗口,选择Other下的 PCH File,二、配置pch文件在target中选择Build Settings,搜索Prefix Header,手动配置PCH文件的位置双击Prefix Header后面空白处,将PCH文件路径拖拽过去,修改路径前缀为$(SRCROOT)三、编辑PCH文件PCH文件使用时需要 commond+B 预编译一次.#ifdef OBJC(OBJC前后是两条下划线)和#endif可以将OC的头文件与C语原创 2021-06-01 10:53:47 · 739 阅读 · 0 评论 -
iOS开发之推送
从上图我们可以看到:1、应用程序注册消息推送。2、iOS从APNs获取device Token,应用程序接收device Token。3、应用程序将device token发送给PUSH服务端程序。4、服务端程序向APNS服务发送消息。5、APNS服务将消息发送给iPhone应用程序。原创 2021-06-01 09:25:39 · 497 阅读 · 0 评论 -
iOS开发之添加键盘弹出监听事件
当键盘弹出时,页面控件需要重新布局,需要获取键盘的高度,添加键盘监听事件1.在viewDidLoad中添加键盘监听#pragma mark -键盘弹出添加监听事件 // 键盘出现的通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil]; // 键盘消失的原创 2021-06-01 10:55:44 · 995 阅读 · 0 评论 -
iOS开发之NSMutableParagraphStyle富文本
在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线行间距的需求。就需要富文本来实现。###一、实例化方法和使用方法 NSMutableAttributedString *detailStr = [[NSMutableAttributedString alloc] initWithString:detailString];NSRange stringRange = NSMakeRange(0, 5); [detailStr addAttribute:NS原创 2021-06-01 10:30:29 · 1537 阅读 · 0 评论 -
iOS开发之TextField和TextView限制表情输入
#一、通过判断当前的输入模式禁止表情输入- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ if (textField == self.searchText) { if (string.length == 0) return YES; //不支持系统表情的输入原创 2021-06-01 10:26:39 · 673 阅读 · 0 评论 -
iOS开发之NSLog打印控制
开发过程中,我们会在项目中添加很多日志以便调试,打包后这些日志并不需要,我们可以将这些日志屏蔽掉。#一、添加宏定义#ifdef DEBUG#define DLog(s,...) NSLog(@"%s LINE:%d < %@ >",__FUNCTION__, __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__]);#define DMethod() NSLog(@"%s", __func__);#else#define DL原创 2021-06-01 10:39:54 · 286 阅读 · 0 评论 -
iOS开发之获取view的截图
#一、获取普通视图的截图#pragma mark 获取截屏图片- (UIImage *)captureScreenForView:(UIView *)currentView { // 开启一个绘图的上下文 UIGraphicsBeginImageContextWithOptions(CGSizeMake(currentView.size.width, currentView.size.height), NO, 0.0); // 作用于CALayer层的方法。将view的layer原创 2021-06-02 09:31:25 · 1002 阅读 · 1 评论 -
在ImageView上画虚线
在- (void)viewDidLoad中定义imageView// 虚线 UIImageView *lineImage = [[UIImageView alloc] initWithFrame:CGRectMake(10, 75, kViewWidth - 20, 0.5)];// lineImage.backgroundColor = [UIColor redColor]; lineImage.image = [self drawLineByImageView:lineImag原创 2021-06-02 09:28:16 · 364 阅读 · 0 评论