必威-必威-欢迎您

必威,必威官网企业自成立以来,以策略先行,经营致胜,管理为本的商,业推广理念,一步一个脚印发展成为同类企业中经营范围最广,在行业内颇具影响力的企业。

pragma mark - 04 计算文字尺寸必威:,pragma mark —

2019-10-05 01:10 来源:未知

pragma mark 概念

/** static int b = 0; // 原本在栈里面 通过static修饰之后 到了静态区 static 是会开辟一次存储空间 */
pragma mark — 04 隐藏启动图片的状态栏
只需要在info.plist文件中添加字段
Status bar is initially hidden 并置为YES就好
pragma mark - 13 从xib创建的cell注册方法
//注册
        [_tableView registerNib:[UINib nibWithNibName:NSStringFromClass([MainTableViewCell class]) bundle:nil] forCellReuseIdentifier:@"cell"];
pragma mark - 02 tableViewCell的刷新
全局刷新:[self.tableView reloadData];
局部刷新:NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];
[self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationBottom];
//刷新第 0 组的第 row 行
pragma mark — 08 设置UITableViewCell的分割线最简单的方法
  • 最快最简单设置UITableViewCell分割线
在自定义cell的.m文件中重写设置cell frame 的方法
#pragma mark -- 重写cell的frame方法来自己设置Cell的布局
-(void)setFrame:(CGRect)frame
{
     //设置Cell的高度少1;为cell加上分割线,分割线颜色就是tableView的背景色
    frame.size.height -= 1;
    [super setFrame:frame];
 }

pragma mark 代码

#include <stdio.h>void test(){ int a = 0; // 局部变量 放在栈 // 当使用static 来修饰局部变量,那么会延长局部变量的声明周期,并且会更改局部变量存储的位置,将局部变量从栈转移到静态区中 static int b = 0; // 原本在栈里面 通过static修饰之后 到了静态区 // 只要使用static修饰局部变量后,当执行到定义局部变量的代码就会分配存储空间,但是只有程序结束才会释放该存储空间 a++; b++; printf("a = %in",a); // 1 printf("b = %in",b); // 2 printf("----------n");}void demo{ /* 应用场景: 当某个方法的调用 频率非常高,而该方法中更有些变量的值是固定不变的 那么这个是会 就可以使用static来修饰该变量,让该变量只开辟一次存储空间 这样可以提高程序的效率和性能 */ double pi = 3.1415926 ; // 固定 double res = pi * r * r; printf("res = %lfb",res);}int main; test(); for (int i = 0; i < 100; i++) { demo; } return 0;}
pragma mark — 11
pragma mark - 07
  • 延迟执行
 //1.延迟执行的第一种方法
    [self performSelector:@selector(task) withObject:nil afterDelay:2.0];

    //2.延迟执行的第二种方法
    [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(task) userInfo:nil repeats:NO];

 //3.延迟执行的第三种方法--GCD
// dispatch_queue_t queue = dispatch_get_main_queue();//在主线程中
 dispatch_queue_t queue = dispatch_get_global_queue(0, 0);//全局并发队列(在异步线程中执行)
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), queue, ^{
        [self task];
    });
pragma mark - 10 判断系统版本
if([[UIDevice currentDevice].systemVersion doubleValue]>=7.0){
//是 IOS7 至以上版本
}else{
//IOS7 以下版本
}
pragma mark — 02 id特性的运用
  • 先说说问题情况,就是我自定义了三个textField,都有一个暴露给外界调用的一个方法 - (void)initiaText; 然后在textField的代理方法中我想调用这个方法而又不去写具体的自定义类名
//三个自定义的UITextField
 _flagField.delegate = self;
 _birthdayField.delegate = self;
 _cityField.delegate = self;

//代理方法:(笨写法)
- (void)textFieldDidBeginEditing:(FlagField *)textField
{
  [textField initialText];
} 
//利用id特性:能调用任何对象的方法—我们就不用去修改代理的父类名称了
- (void)textFieldDidBeginEditing:(id)textField
{
  [textField initialText];
}
pragma mark — 10
pragma mark - 12 进程和线程的简单介绍
 1、进程
(1)正在进行中的程序被称为进程,负责程序运行的内存分配。
(2)每一个进程都有自己独立的虚拟内存空间。
2、线程
    (1)线程是进程中一个独立的执行路径(控制单元)。
    (2)一个进程中至少包含一条线程,即主线程。
    (3)可以将耗时的执行路径(如网络请求)放在其他线程中执行。
(4)线程不能被杀掉,但是可以暂停/休眠一条线程。
    (5)创建线程的目的:
    开启一条新的执行路径,运行指定的代码,与主线程中的代码实现同时运行。
    (6)多任务调度系统:
    每个应用程序由操作系统分配的短暂的时间片(Timeslice)轮流使用CPU,由于CPU对每个时间片的处理速度非常快,因此,用户看来这些任务好像是同时执行的。
    (7)并发:
指两个或多个任务在同一时间间隔内发生,但是,在任意一个时间点上,CPU只会处理一个任务。
备注:主线程最大占1M的栈区空间,每条子线程最大占512K的栈区空间。
    3、多线程
    (1)充分发挥多核处理器优势,将不同线程任务分配给不同的处理器,真正进入"并行运算"状态。
    (2)将耗时的任务分配到其他线程执行,由主线程负责统一更新界面会使应用程序更加流畅,用户体验更好。
    (3)当硬件处理器的数量增加,程序会运行更快,而程序无需做任何调整。
    (4)新建线程会消耗内存空间和CPU时间,线程太多会降低系统的运行性能
pragma mark - 12 块遍历
#遍历数组
-(void)enumerateObjectsUsingBlockArr
{
    //创建数组
    NSArray *array = @[@"tamc",@"kobe",@"king",@"Ko",@"Tmac",@"Brant",@"jiangjun"];
    [array enumerateObjectsUsingBlock:^(id  _Nonnull key, NSUInteger idx, BOOL * _Nonnull stop) {
        // NSLog(@"string = %@",key);
        if (idx == 0) {
            NSLog(@"string = %@",key);
        }
    //再加个判断,当遍历到某某值时停止遍历
        if ([key isEqualToString:@"king"]) {
            *stop = YES;
            NSLog(@"string = %@",key);
        }
    }];
}
#遍历字典
-(void)enumerateObjectsUsingBlockDict
{
     NSDictionary *dict = @{@"name":@"jiangjun",@"sex":@"man",@"age":@"18",@"whight":@"65",@"higeht":@"180"};
   [dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *obj, BOOL * _Nonnull stop) {
       NSLog(@"value = %@",obj);
       NSLog(@"key = %@",key);
 }];
}
pragma mark — 09 利用导航栏跳转时隐藏底部的tabBar栏
 NextViewController *nextVc = [[NextViewController alloc]init];
//设置跳转到的页面标签栏隐藏    
nextVc.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:nextVc animated:YES];
//设置当前界面标签栏不隐藏
self.hidesBottomBarWhenPushed = NO;
pragma mark — 06 判定程序是否是第一次在设备上运行
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//   使用NSUserDefaults来判断程序是否第一次启动
    NSUserDefaults *FirstLaunch = [NSUserDefaults standardUserDefaults];
    if (![FirstLaunch valueForKey:@“firstTime"]) {
        [FirstLaunch setValue:@"sd" forKey:@“firstTime"];
        NSLog(@"第一次启动");
    }else{
        NSLog(@"不是第一次启动");
    }

   return YES;
}
pragma mark - 14.label的设置圆角的区别
#常用做法
 self.label.text = @"皮尔斯";
    self.label.backgroundColor = [UIColor brownColor];

    self.label.layer.cornerRadius = 5;
    self.label.layer.borderWidth = 1;
    self.label.layer.borderColor = [UIColor cyanColor].CGColor;
    self.label.layer.masksToBounds = YES;

#修改后的不会造成离屏渲染
self.label.text = @"皮尔斯";
    self.label.layer.backgroundColor = [UIColor brownColor].CGColor;

    self.label.layer.cornerRadius = 5;
    self.label.layer.borderWidth = 1;
    self.label.layer.borderColor = [UIColor cyanColor].CGColor;
pragma mark - 11 Xcode 模拟器上的一些快捷键
Cmd+1/2/3       可以切换模拟器的显示比例。

Option+Shift     可以在模拟器中调出双指拖动效果。

Option      可以在模拟器中调出双指放大缩小效果。

command+Shift+H       模拟器的Home键。

Cmd+向左箭头/向右箭头       切换横竖屏。

前言:把自己平常写项目遇到的一些问题的解决方案总结到这里,方便自己以后查看,也希望对看文章的你有一定的帮助

TAG标签:
版权声明:本文由必威发布于必威-编程,转载请注明出处:pragma mark - 04 计算文字尺寸必威:,pragma mark —