iOS 小知识点(持续更新)

 

 

 

 

 

一、如何经过代码设置Button  title的字体大小html

设置ios

Button.titleLabel.font = [UIFont systemFontOfSize:<#(CGFloat)#>];

 

二、获取当前时间git

    NSDate *timeDate=[NSDate date];
    
    NSDateFormatter * dateformatter=[[NSDateFormatter alloc] init];
    
    [dateformatter setDateFormat:@"YYYYMMddHHmmsssss"];
    
    NSString *locationString=[dateformatter stringFromDate:timeDate];

 

三、判断字符串是否为空字符的方法github

- (BOOL) isBlankString:(NSString *)string {
    if (string == nil || string == NULL) {
        return YES;
    }
    if ([string isKindOfClass:[NSNull class]]) {
        return YES;
    }
    if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) {
        return YES;
    }
    return NO;
}

 

四、tableView优化swift

    //刷新整个表格
    [_tableView reloadData];
    
    //刷新当前行
    [_tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

 

五、百度地图自定义大头针图片数组

- (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id <BMKAnnotation>)annotation
{
    // 生成重用标示identifier
    static NSString *AnnotationViewID = @"AnnotationViewID";
    
    // 检查是否有重用的缓存
    BMKAnnotationView* annotationView = [view dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
    ((BMKPinAnnotationView*)annotationView).pinColor = BMKPinAnnotationColorGreen;
    annotationView.image = [UIImage imageNamed:@"XXX.png"];
}

 

六、iOS APP上架所须要的 屏幕尺寸缓存

  640*960、640*113六、750*133四、1242*2208服务器

 

七、iOS APP 图标的尺寸并发

  58*5八、80*80、120*120、180*180app

 

八、

苹果公司帐号申请:
这个是申请方法:http://jingyan.baidu.com/article/0320e2c1d153161b87507bba.html
这个是官网:https://developer.apple.com/enroll/organization/

 

九、关闭定时器

[_myTimer invalidate];

 _myTimer = nil;

 

十、键盘释放第一响应

 - (BOOL)textFieldShouldReturn:(UITextField *)textField {

 [textField resignFirstResponder];

 return YES;

}

 

十一、点击UITableViewCell时,没有点击效果,

在cellForRowAtIndexPath:方法中写上

cell.selectionStyle = UITableViewCellSelectionStyleNone;

 

十二、使用NSJSONSerialization 返回的对象,取决于最外层是什么,若是是{}那就是字典,[]那就是数组等

 

1三、只支持竖屏,修改info.plist 文件就能够了。找到"Supported interface orientations" 设置item 项为Portrait就能够了。这个设置为全局设置。

 

1四、iOS开发

先搭框架,后画界面,写功能,写接口,调试,写适配

iOS 开发文档 流程图 UI 框架 接口 功能 适配 测试 更改
iOS 初级开发工程师 C语言基础+swift语言基础
      中级iOS开发工程师 iOS项目开发+UI部分+动画图层部分

 

1五、ViewController的生命周期中各方法执行流程以下:

init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc

 

1六、GCD

1)运行在主线程的Main queue,经过dispatch_get_main_queue获取。
2)并行队列global dispatch queue,经过dispatch_get_global_queue获取,由系统建立三个不一样优先级的dispatch queue。并行队列的执行顺序与其加入队列的顺序相同。
3)串行队列serial queues通常用于按顺序同步访问,可建立任意数量的串行队列,各个串行队列之间是并发的。

1七、Xcode项目中咱们常常遇到由于空数据(服务器传回来的数据经过JsonKit解析为之类的)致使内存泄漏进而程序崩溃的现象,这个在以前学校的时候就被坑了不少次,因此有必要封装一个非空处理的类,因为能力有限,查看一些网上的资料,想到采用递归的方式处理。

解决办法:一个老外早已在Githud有了空处理的神器:https://github.com/nicklockwood/NullSafe,只要将这个类别(Category)加入项目中就可万事无忧,因为里面代码我也不太懂,因此你们本身研究下哈。

 

1八、读取plist文件

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"provinces.plist" ofType:nil];

NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];

 // 加载plist数据
    
//     一个NSBundle对象对应一个资源包(图片、音频、视频、plis等文件)
//     NSBundle的做用:用来访问与之对应的资源包内部的文件,能够用来得到文件的全路径
//     项目中添加的资源都会被添加到主资源包中
//     [NSBundle mainBundle]关联的就是项目的主资源包

    NSBundle *bundle = [NSBundle mainBundle];
    
    // 利用mainBundle得到plist文件在主资源包中的全路径
    NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"];
//    NSString *file = [bundle pathForResource:@"shops.plist" ofType:nil];
    // 凡是参数名为File,传递的都是文件的全路径
    shopsArray = [NSArray arrayWithContentsOfFile:file];

 1九、懒加载:用到时再去加载,并且也只加载一次

      (1).懒加载基本

       懒加载——也称为延迟加载,即在须要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其get方法.

       注意:若是是懒加载的话则必定要注意先判断是否已经有了,若是没有那么再去进行实例化

      (2).使用懒加载的好处:

       好处一:没必要将建立对象的代码所有写在viewDidLoad方法中,代码的可读性更强

       好处二:每一个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合

20、

//字符串转变为数组

NSMutableString * str=[[NSMutableString alloc]initWithFormat:@"1,1,1,1,1,1"];

//字符串转变为数组2

NSMutableArray * array=[NSMutableArray arrayWithArray:[str   componentsSeparatedByString:@","]];

//替换数组中的某个值

[array replaceObjectAtIndex:4 withObject:@"2"];

//把数组转换成字符串

NSString *ns=[array componentsJoinedByString:@","];

  

 

2一、NSCalendar

  //1. 建立1个当前的日历对象.

    //   做用: 能够取到1个日期对象的各个部分.

    NSCalendar *calendar = [NSCalendar currentCalendar];

    //2. 指定日历对象,要去取日期对象的那些部分.

    NSDateComponents *com =  [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekday fromDate:date];

 

    //3. 经过NSDateComponents取到指定的日期的各个部分.

    NSLog(@"%lu",com.year);

    NSLog(@"%lu",com.month);

    NSLog(@"%lu",com.day);

    NSLog(@"%lu",com.weekday);

    */

 

2二、将NSString 拆分红array

NSString * writerPos=@"10,30,400,300";

NSArray *arrWriterPos =[writerPos componentsSeparatedByString:NSLocalizedString(@",", nil)];//拆分红数组

2三、UITableView每一个cell之间的默认分割线如何去掉

  很简单,只须要

  tableView.separatorStyle = NO;

2四、设置tableviewcell不让选中

1:cell.userInteractionEnabled = NO;

2:[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

这两种方法都能实现不让cell有点击事件。

但若是cell中有button第一个方法也会让button失去点击事件。

2五、iOS 怎么设置 UITabBarController 的第二个item为第一响应者?

    UITabBarController *VC = [[UITabBarController alloc]init];

        VC.selectedIndex = 1;

        [self.navigationController pushViewController:VC animated:YES];

2六、如何设置ios app应用名称?

info.plist文件中添加一个key:Bundle display name,value 填上应用名称

2七、设置uiscrollview偏移量:

scrollView.contentOffset=CGPointMake(int x, int y);

2八、状态栏

在iOS7中,状态栏默认状况下归控制器管理,好比状态栏的样式、状态栏的是否可见

控制器经过重写如下方法来控制状态栏

设置状态栏的样式

(UIStatusBarStyle)preferredStatusBarStyle;

其中UIStatusBarStyleLightContent是白色样式

 

设置状态栏的可见性

- (BOOL)prefersStatusBarHidden;

2九、懒加载

为了改变现状,能够考虑将图片数据线保存到一个数组中,数组中有序地放着不少字典,一个字典表明一张图片数据,包含了图片名、图片描述

@property (strong, nonatomic) NSArray *images;

因为只须要初始化一次图片数据,所以放在get方法中初始化

将属性放在get方法中初始化的方式,称为“懒加载”\”延迟加载”

 30、OC语法规定:不容许直接修改对象的结构体属性的成员

下面代码是错误的:

self.headBtn.frame.origin.y -= 10;

3一、transform属性

利用transform属性能够修改控件的位移(位置)、缩放、旋转

建立一个transform属性(仔细看这里的方法名,里面有个Make,是和下面进行叠加方法最大的区别)

CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx,  CGFloat ty) ;

CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);

CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)

(注意:angle是弧度制,并非角度制)

在某个transform的基础上进行叠加

CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty);

CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);

CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);

 

清空以前设置的transform属性

view.transform = CGAffineTransformIdentity;

3二、当你发现经过代码没法修改控件的位置或者尺寸的时候,应该去掉storyboard里面的autolayout功能

3三、instancetype

instancetype在类型表示上,跟id同样,能够表示任何对象类型

instancetype只能用在返回值类型上,不能像id同样用在参数类型上

instancetype比id多一个好处:编译器会检测instancetype的真实类型

3四、重写init方法的使用和注意

必定要调用super的init方法:由于初始化父类中会声明一些成员变量和其余属性

就是调用super的init方法 最后返回的就是一个id也就是self

有时候调用[super init]方法返回的不必定是一个self,可是为了保证它返回的是一个self就要进行一个赋值操做;

注意:调用super 初始化完毕 就必定要赋值给self

 

返回一个self意思是:返回一个已经初始化完毕的一个对象

 构造方法的注意点:

先调用父类的构造方法[super init];

再进行子类内部成员变量的初始化

3五、layoutSubviews做用

layoutSubviews是对subviews从新布局。好比,咱们想更新子视图的位置的时候,能够经过调用layoutSubviews方法,既能够实现对子视图从新布局。

layoutSubviews默认是不作任何事情的,用到的时候,须要在自雷进行重写。

3六、layoutSubviews如下状况会被调用

苹果官方文档已经强调,不能直接调用layoutSubviews对子视图进行从新布局。那么,layoutSubviews什么状况下会被调用呢?经过百度搜索,发现如下几种状况layoutSubviews会被调用。

直接调用setLayoutSubviews。(这个在上面苹果官方文档里有说明)
addSubview的时候。
当view的frame发生改变的时候。
滑动UIScrollView的时候。
旋转Screen会触发父UIView上的layoutSubviews事件。
改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。

3七、property的使用策略

    strong 通常是使用在OC对象上 (也可使用在UI控件上(会有问题的))

            NSSArray  NSDictionary 模型...

    weak  通常是使用在UI控件上  也可使用在OC对象(也是有问题的)

            UITextFeild UIButton.....

    copy   通常使用在NSString  Block

    assign  通常是使用基本数据类型上, 枚举  结构体

3八、一个控件有2种建立方式

    第1、经过代码建立

  初始化时必定会调用initWithFrame:方法

  第2、经过xib\storyboard建立

  初始化时不会调用initWithFrame:方法,只会调用initWithCoder:方法

  初始化完毕后会调用awakeFromNib方法

  有时候但愿在控件初始化时作一些初始化操做,好比添加子控件、设置基本属性

  这时须要根据控件的建立方式,来选择在initWithFrame:(给控件设置位置)initWithCoder:awakeFromNib(初始化控件)的哪一个方法中操做

3九、tableview 的detailTextLabel 不起做用

要想给tableview加detailTextLabel,

initWithStyle必须为:UITableViewCellStyleSubtitle

40、一个 view 在父视图中心

child.center = [parent convertPoint:parent.center fromView:parent.superview];

4一、键盘上方增长工具栏

UIToolbar *keyboardDoneButtonView = [[UIToolbar alloc] init];
    [keyboardDoneButtonView sizeToFit];
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneClicked:)];

    [keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton, nil]];
    txtField.inputAccessoryView = keyboardDoneButtonView;

4二、判断某一行的 cell 是否已经显示

CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];
BOOL completelyVisible = CGRectContainsRect(tableView.bounds, cellRect);

4三、隐藏 UITextView/UITextField 光标

textField.tintColor = [UIColor clearColor];

4四、修改UITextField光标位置

textFielde.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
textField.leftViewMode = UITextFieldViewModeAlways;

4五、Block的循环引用

  若是在Block中使用_strong修饰符的对象类型自动变量,当block从栈复制到堆时,该对象为Block所持有。这样就容易引发循环引用。

为了不循环引用可使用_block变量、_weak修饰符以及_unsafe_unretained修饰符。 

_block和_weak的区别:

1._block能够修饰对象,也能够修饰基本类型。

2._weak只能够修饰对象。

3._block在block中能够被从新赋值,_weak不能够。

_unsafe_unretained不会被自动置空为nil。

相关文章
相关标签/搜索