首页 > 其他分享 >iOS开发经验积累 二

iOS开发经验积累 二

时间:2023-02-07 15:05:39浏览次数:37  
标签:积累 控制器 经验 return 对象 self float iOS 255.0


1.使用场景:在进入C控制器,可能有两个入口A和B控制器,从哪个入口进来,点击返回就返回哪个控制器。这样我们可以在C控制器中写上这个导航控制器的方法来判断,控制器栈中存在的是是否存在A或者B控制器,如果有A代表从A入口进来,那么就返回A,B则同义。

UIViewController *VC = [self.navigationControllerviewControllerWithName:@"AViewController"];

【下面是导航控制器的分类方法

- (UIViewController *)viewControllerWithName:(NSString *)_name {
Class cls = NSClassFromString(_name);
for (UIViewController *vcinself.viewControllers) {
if ([vcisKindOfClass:cls]) {
return vc;
}
}
returnnil;
}】
if(VC isKindOfClass:[NSClassFromString[A class]]){
则返回A;
}esle{
则返回B。
}

OK到这里,你应该理解了把?

2.实现对象的复制

对象实现NSCopy协议, 对象的.m写上下面这段代码,用C的函数比较多,外部调用直接使用[对象 copy]

- (id)copyWithZone:(NSZone *)zone{

id flightList = [[[selfclass]allocWithZone:zone] init];
size_t instanceSize =class_getInstanceSize([selfclass]);
memcpy((__bridgevoid *)(flightList), (__bridgeconstvoid *)(self), instanceSize);
return flightList;
}

3.

-(void)sizeToFit;这个可以主动调用,会自动调用sizeThatFits,不应该被重写,可以重写sizeThatFits。

-(void)sizeThatFits;可以计算去调用者被填充内容后的宽高。传入的参数是receiver当前的size,返回一个适合的size。

使用场景:return [self.txtViewTips sizeThatFits:CGSizeMake(SCREEN_WIDTH,FLT_MAX)].height;可以得到UITextView被填充文字后的高度。

FLT_MAX表示的是CGFloat可以表示的最大数。

4.正常情况下向已经回收的对象发送消息时灵时不灵,具体要看该对象所占内存有没有被覆写。coco提供了僵尸对象(zombie Object)这个功能,简单的说:弃启用该调试功能后,运行时会将所有已回收的实例转化为特殊的“僵尸对象”,而不会真正回收它们。这种对象在核心内存无法重用,因此不可能遭到覆写。僵尸对象受到消息后悔抛出异常,其中说明了发送来的消息,并描述了回收之前的对象。僵尸对象是调试内存管理问题的最佳方式。

5.判断字符串是否包含字母,网上找的正则都太不靠谱了,自己撸了一个方法 根据大小写字母的ascii来判断

/* 判断是否包含包含字符返回包含字符的长度 */
NSInteger letterCount =0;
for (int i =0; i <applicantName.length; i++) {
int asciiCode1 = [applicantNamecharacterAtIndex:i];
if ((asciiCode1>64 && asciiCode1<91) || (asciiCode1>96 && asciiCode1<123)) {
letterCount ++;
}
}

6.RGB颜色宏定义


#define RGBA(r,g,b,a)   [UIColor colorWithRed:(float)r/255.0f green:(float)g/255.0f blue:(float)b/255.0f alpha:a]

7.16进制宏定义


#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue &0xFF0000) >>16))/255.0 green:((float)((rgbValue &0xFF00) >>8))/255.0 blue:((float)(rgbValue &0xFF))/255.0 alpha:1.0]

8.获取一个view视图的所在控制办法

- (UIViewController *)viewController {
for (UIView* next = [self.customViewsuperview]; next; next = next.superview) {
UIResponder *nextResponder = [nextnextResponder];
if ([nextResponderisKindOfClass:[UIViewControllerclass]]) {
return (UIViewController *)nextResponder;
}
}
returnnil;
}

9.iOS7之后的导航栏遮盖问题

self.extendedLayoutIncludesOpaqueBars = NO;
self.edgesForExtendedLayout = UIRectEdgeBottom | UIRectEdgeLeft | UIRectEdgeRight;

tabbar遮挡内容 同样的解决办法,只要将UIRectEdgeBottom去掉即可

10.xib的UI控件frame加载时间

记得之前一值纳闷在xib中的控制器view宽度为320,但是当加载到屏幕宽度为375的屏幕时候,这个view就变成了屏幕的宽度375;之前一直纳闷什么时候拿到才是375呢,这个中间节点在哪呢。其实是在viewDidAppear,当在这个方法之前的拿到的都是320,在这个方法以及之后就是真正加载出来的那个frame。

11.还有一个疑问,练习page的这个,加约束显示不加不显示,有时间深究下

12.命名导入一个cell,但是却一直写不出来报错,说不存在

上午在一个控制器中导入一个cell,明明#import导入进去了,但是却一直不能写出来这个cell,一直报错,最终的原因查出来了,是因为在项目中存在两个不同路径单一个名字这样的cell,所以编译器不知道你要使用的是哪一个,一直报错说不存在。找到原因是拿Sublime这个编辑器全局搜索的出来的发现两个路径。

13.textView可以通过简单的配置自动识别常见格式的电话号码,但是有些非正常格式的例如95511,这个时候需要通过一些其他的配置来实现:下面贴出来代码:

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:self.responseGetVisaOrderDetail.visaLogisticsInfo.logisticPhone
attributes:@{NSFontAttributeName:font_Info,
NSForegroundColorAttributeName:RGBA(0, 160, 255, 1)}];
[attributedString addAttribute:NSLinkAttributeName value:[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",self.responseGetVisaOrderDetail.visaLogisticsInfo.logisticPhone]] range:NSMakeRange(0,self.responseGetVisaOrderDetail.visaLogisticsInfo.logisticPhone.length)];
self.phoneRightTxtView.attributedText = attributedString;
-(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange{
return YES;
}

标签:积累,控制器,经验,return,对象,self,float,iOS,255.0
From: https://blog.51cto.com/u_15952281/6042121

相关文章

  • iOS/OS X内存管理(一):基本概念与原理
    在Objective-C的内存管理中,其实就是引用计数(referencecount)的管理。内存管理就是在程序需要时程序员分配一段内存空间,而当使用完之后将它释放。如果程序员对内存资源使用......
  • iOS7中UIView的animateKeyframesWithDuration方法讲解
    在iOS7中,给UIView添加了一个方法用来直接使用关键帧动画而不用借助CoreAnimation来实现,那就是animateKeyframesWithDuration以下是使用源码:////Vi......
  • iOS应用显示名称问题
    问题Unity版本2020.3,通过设置BuildingSettings的ProductName,导出XCode工程并编译ipa。发现ipa安装后的应用包名没有设置成功。解决官方说明:https://issuetracker.unity3......
  • 把HIVE程序优化30倍的经验
    今天遇到一个HIVE需求,输入只有4列,大概160MB,需要引用一些字典文件,然后输出70列数据;典型的复杂计算,由于HIVE无法单独实现,采用TRANSFORM写了PYTHON脚本实现; 刚开始写完......
  • iOS开发,改变系统铃声音量和静音,并非媒体播放音量
    它可以让iPhone手机静音。但是,AVSystemController存在于私有Celestial框架中。由于UIKit引用了这个框架,因此仍然可以在不直接引用它的情况下使用该类。 Apple禁止使......
  • 开发经验总结-点滴积累
    <欢迎大家加入iOS开发学习交流群:529560119>啊看到一个新的界面,要细细划分区域,应该怎么设计合理。1.如果是在一个cell中有好几行,每行都是两个label,规则排版一样,这样很好做,但......
  • iOS runtime 实战之关联对象(一)
    一、什么是关联对象1、关联对象的概念:associatedObject又称关联对象,把一个对象关联到另外一个对象身上,使两者能够产生联系,我们可以通过associatedObject来给分类扩展属性......
  • 【android 】Android 高级开发工程师技术面试经验总结
    笔者前段时间参加了Android手机厂商的Android高级开发工程师技术面试,总结一下,希望对即将参加技术面试的程序员能有所帮助。    首先面试官问的是项目相关的问题,......
  • 7.7BIOS和引导
    程序的运行环境中,存在着名为BIOS(BasicInput/OutputSystem)的系统。BIOS存储在ROM中,是预先内置在计算机主机内部的程序。BIOS除了键盘、磁盘、显卡等基本控制程序外,还有......
  • 我们从 CircleCI 安全事件获得的3个经验教训
    CircleCI作为业内最受欢迎的CI/CD平台提供商之一,有超过20万个DevOps团队使用其平台。该公司在今年1月在其官网报告了一起安全事件引起客户恐慌。在此事件中,有身份不明......