iOS-常用的知识点(持续更新)

1.模拟器语言切换

我们用到国际化的时候,需要调试不同语言的版本,所以切换语言的话模拟器来回切换很麻烦。简单方法:
xode--->Product--->Scheme--->Edit Scheme--->Run--->Application Language&Region
在这里选择所需要的语言,这样再运行的时候,模拟器语言就变成了所选的。


屏幕快照 2016-08-25 12.11.12.png

2.armv7 arm64等的区别

armv6, armv7, armv7s是ARM CPU的不同指令集,原则上是向下兼容的。如iPhone4S CPU支持armv7, 但它同时兼容armv6,只是使用armv6指令可能无法充分发挥它的特性。同理iPhone5 CPU支持armv7s,它虽然也兼容armv7,但是却无法进行相关的优化。

armv6设备:iPhone, iPhone2, iPhone 3G,第一代、第二代iPod Touch
armv7设备:iPhone 3GS, iPhone 4, iPhone 4S
                    iPad , iPad 2,  the new iPad
                    iPod Touch 3G, iPod Touch 4
armv7s设备:iPhone 5 , the new ...

只有在目标设备上,才会执行设备对应的指令集。
如果在工程Build Setting的Architectures 中的“Build Active Architecture Only”选择为YES,则即使你设置成armv7 , armv7s同时支持,也只会编译对应指令集的包;若选择NO,则编译器会整合两个指令集到一起,此时的包比较大,但是能在iPhone5上使用armv7s的优化,同时也能适配老的设备。一般都是Debug时“Build Active Architecture Only”选择YES,用当前的架构看代码逻辑是否有问题;而在Release时选择NO,来适配不同的设备。
此外,模拟器并不运行arm代码,软件会被编译成x86可以运行的指令。所以生成静态库时都是会先生成两个.a,一个是i386的用于在模拟器运行,另一个是在真实设备上运行的,然后再用命令将两个.a合并成一个。

因此如果一些程序中使用的静态库不支持armv7s,而你的工程支持armv7s时,就会出现“xxxx does not contain a(n) armv7s slice:xxxxx for architecture armv7s"的编译错误,想要解决这个问题,有两个方法:
1.如果是开源的,能够找到源代码,则可以用源代码重新打一个支持armv7s的libaray, 或者在工程中直接使用源代码,而不是静态库。
2.如果不是开源的,要么就坐等第三方库的支持,要么就暂时让你的工程不支持armv7s。

3. 获取类名

很方便的调试及日志工具

NSLog(@"class name----> %@",NSStringFromClass([self class]));

4.图片拼接

这个挺实用的
前提:需要添加Framework:CoreGraphics.framework

- (UIImage *) combine:(UIImage*)leftImage :(UIImage*)rightImage {
        CGFloat width = leftImage.size.width *2;
        CGFloat height = leftImage.size.height;
        CGSize offScreenSize = CGSizeMake(width, height);
        UIGraphicsBeginImageContext(offScreenSize);
        CGRect rect = CGRectMake(0,0, width/2, height);
        [leftImage drawInRect:rect];
        rect.origin.x += width/2;
        [rightImage drawInRect:rect];
        UIImage* imagez = UIGraphicsGetImageFromCurrentImageContext();  
        UIGraphicsEndImageContext();  
        return imagez;
}

5.const char *char *

char *newchar = (char *)malloc(sizeof(char));
memset(newchar, 0, sizeof(char));
strcpy(newchar, (把你return的那个放进去));

6.根据秒数获取时间

好多应用中时间的实用都是用秒数来实现的,那么我怎么怎么把秒数来转为一般的时间格式呢?

//根据秒数获得时间
- (NSString *)bySecondGetDate:(NSString *)second{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSString *dateLoca = [NSString stringWithFormat:@"%@",second];
    NSTimeInterval time=[dateLoca doubleValue];
    NSDate *detaildate=[NSDate dateWithTimeIntervalSince1970:time];
    NSString *timestr = [formatter stringFromDate:detaildate];
    return timestr;
}

6. 汉字转拼音

//“我是中国人” 转成拼音并取首字母  
-(void)hanziToString{
     NSString *hanziText = @"我是中国人";
    if ([hanziText length]) {
        NSMutableString *ms = [[NSMutableString alloc]initWithString:hanziText];
        if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformMandarinLatin, NO)) {
            NSLog(@"pinyin: %@", ms);
        } 
       if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformStripDiacritics, NO)) {
            NSLog(@"pinyin: %@", ms);
        }
               NSString *name=[NSString stringWithString:ms];
        name=[self getFirstWord:name];
        NSLog(@"First word is : %@",name);
    }
}
-(NSString *)getFirstWord:(NSString *)string {
    NSString *firstWord=[string substringToIndex:1];
    return firstWord;
}

7.获得当前系统语言

- (void)getCurrentLanguage{
        NSString*currentLanguage = [[NSLocale preferredLanguages]objectAtIndex:0];
        NSLog(@"当前系统语言:%@", currentLanguage);
}

8.使屏幕一直保持唤醒状态(就是不自动黑屏)、

加一句代码

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];  

9.在Xcode中,文件名后小方框中的A(M或C)表示的含义

屏幕快照 2016-08-25 14.51.19.png

这种标识是做版本控制用的,表示在版本控制中,自上一次提交以来,文件做了修改。貌似只有在带有版本控制的项目代码中才会显示,也就是说你的项目使用了SVN、GIT等工具后,会在Xcode中识别出来。

'A'  新增,表示该文件是新添加的,已受SVN管理,需要 commit.(右键该文件 -> source control -> commit selected file...)
'D'  删除,表示该文件在服务器上已被删除,这时update的话,可删除本地的文件。
'M'  修改,表示该文件已被修改,需要 commit.(右键该文件 -> source control -> commit selected file...)
'R'  替代,表示该文件被替换。
'C'  冲突,表示该文件与服务器的文件冲突。
'I'  忽略,表示该文件被忽略或未识别
'?'  未受控,表示该文件是新添加的,并且脱离了SVN的管理,首先需要add,然后 commit.(右键该文件 -> source control -> Add,这样该文件的标记就变为 “A”,然后在 commit
'!'  丢失,一般是将受控文件直接删除导致 

10.动态加载类(NSClassFromString)

一般说来,下面这两种写法
id classNew = [[NSClassFromString(@"MyTestClass") alloc] init];
id classNew = [[MyTestClass alloc] init];
是一样的。但是当你项目中没有MyTestClass这个类的时候,上面的会返回一个空对象,而下面的则是报错。
使用NSClassFromString的好处是不需要插入这个类的头文件,也防止link到不存在的Framework

11.图片设置成圆形

self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 100, 100)] ;
self.imageView.layer.cornerRadius = 100/2 ; // 设置半径
self.imageView.layer.masksToBounds = YES ; // 边界是否允许截取

同理,一些view控件的圆角都可以这样做

view.layer.cornerRadius =5;

12.string转UTF8编码

好多时候我们会用到UTF8编码去传递一些东西,比如服务器数据提交

NSString *string=@"北京";
string=[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

13.模拟器上的放大缩小手势快捷键

一般在对图片和地图操作的时候,会用到放大缩小的手势

模拟器的快捷键是:cmd+alt+左键

14.改变label部分字体颜色

屏幕快照 2016-11-09 16.50.45.png

像图中这样。代码很简单


    myLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 50, 300, 30)];
    myLabel.text=@"今天天气好晴朗,处处好风光";
    [self.view addSubview:myLabel];   
   NSMutableAttributedString *hintString=[[NSMutableAttributedString alloc]initWithString:@"今天天气好晴朗,处处好风光"];
    //获取要调整颜色的文字位置,调整颜色
    NSRange range1=[[hintString string]rangeOfString:@"天气好"];
    [hintString addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:range1];
    
    NSRange range2=[[hintString string]rangeOfString:@"处处好"];
    [hintString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range2];

    myLabel.attributedText=hintString;

想封装一下会更方便一些。

-(void)addControllers{
    myLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 50, 300, 90)];
    myLabel.numberOfLines=0;
    [self.view addSubview:myLabel];

    NSString *text=@"这一定是一个非常长的句子,请相信我,这个句子我也不知道是怎么想出来的,将就着用吧。哇嘎嘎嘎。";
    NSArray *textArray=[NSArray arrayWithObjects:@"定是",@"常长",@"信我",@"道是",@"就着", nil];
    NSArray *colorArray=[NSArray arrayWithObjects:[UIColor redColor],[UIColor greenColor],[UIColor yellowColor],[UIColor purpleColor],[UIColor blueColor], nil];
    [self changeColorInLabel:myLabel AndText:text WihtTextArray:textArray AndColorArray:colorArray];
}
-(void)changeColorInLabel:(UILabel *)label AndText:(NSString *)string WihtTextArray:(NSArray *)textArray AndColorArray:(NSArray *)colorArray{
    NSMutableAttributedString *hintString=[[NSMutableAttributedString alloc]initWithString:string];
    for (int i=0; i
屏幕快照 2016-11-09 17.06.30.png

如果连参数你都觉得麻烦。。。。请自行解决。。。。

15.

你可能感兴趣的:(iOS-常用的知识点(持续更新))