必威-必威-欢迎您

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

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

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

pragma mark 概念

/** 条件编译 和 选择结构if的共同点 都可以给定的条件进行判断,添加满足或者不满足都可以执行特定的代码 1.生命周期不同 if 运行时 #if 编译之前 2.#if需要一个明确的结束符号 #endif 为什么要一个明确的结束符号 如果省略掉#endif,那么系统就不知道条件编译的范围,那么会将满足条件之后的第二个条件之后的所有内容 都清除掉 3. if会将所有的代码都编译到二进制中 #if只会将满足条件的部分一直到下一个条件的部分 编译到二进制中 条件编译的优点 1.缩小应用程序的大小 应用场景: 一般用于调试和发布阶段进行测试 调式阶段: 程序写代码的阶段 发布阶段: 上传到AppStore的阶段 */
查看目录
01 自定义导航栏左上角返回按钮后,返回失效的解决
02 关于tableViewCell上的按钮状态重用问题
03 时间转换上的问题
04 隐藏启动图片的状态栏
05 TableView不显示没内容的Cell
06 判定程序是否是第一次在设备上运行
07 禁止应用横屏
08 本地化按钮状态
09  解决NSTimer在主线程不运行的方法
pragma — mark - 06
  • 把NSString格式的日期转换为NSDate
  • 日期格式转换对应符号
// 时间字符串
NSString *string = @"2015-11-20 09:10:05";

// 日期格式化类(用这个类来转换)
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
// 设置日期格式(必须告诉它你想要转换为何种日期格式)
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
// NSString * -> NSDate *
NSDate *date = [fmt dateFromString:string];
NSLog(@"%@", date);
pragma mark - 07 initailize、load 方法的区别
(1)initailize、load 都是类方法
(2)当一个类被装载进内存时,就会调用一次 load 方法(当时这个类还不可用)
(3)当第一次使用这个类时,就会调用一次 initailize 方法
查看目录
01 解决UICollectionView点击手势与didSelected方法冲突
02 id特性的运用
03 标签控制器标签栏设置背景
04 设置图片的渲染模式
05 UITableViewCell的点击效果设置
06 UITableView 滑动遇到的小问题
07 运行突然出现you don’t have permission to view it错误
08 设置UITableViewCell的分割线最简单的方法
09 利用导航栏跳转时隐藏底部的tabBar栏
10 直接设置导航栏中间标题的字体大小和颜色
11 如何设置自定义字体
12 AFNetWorking 请求数据报”Request failed: unacceptable content-type: text/plain” 错误解决方法

pragma mark 代码

#include <stdio.h>#pragma mark - 调试和发布阶段 Log start#define DEBUG 0 // 0是调试阶段 1是发布阶段// format 是一个关键字 ...输入0个或者多个东西// define 是一个宏仅仅做替换 把YHLog(format,...) 替换了printf(format,## __VA_ARGS__)// 本质上 还使用printf来输出内容的,只不过是系统帮我们做了一个替换// 把DEBUG 改成 1 说明 else这个语句里面没有值 所以替换成空白#if DEBUG == 0 // 调试阶段#define YHLog(format,...) printf(format,## __VA_ARGS__)#else#define YHLog(format,...)#endif#pragma mark 调试和发布阶段 Log end#define SCORE 90int main(){#warning if选择结构 // 可以通过终端来确认 cc -c main.c 生成main.o 可以查看到字节比较大 924字节 // 条件编译和if非常非常像 // if选择结果会给定 条件进行判断, 如果条件满足就执行if后面大括号中的内容 // 条件编译也一样, 会对给定的条件进行判断, 如果条件满足 就编译条件后面的内容 /* */ int scoure = 90; if (scoure == 100) {// printf;// printf("发朵大红花n"); YHLog; YHLog("发朵大红花n"); } else if (scoure == 90) {// printf;// printf("发朵小红花n"); YHLog; YHLog("发朵小红花n"); } else {// printf;// printf; YHLog; YHLog; } // 运行的时候 执行// int score = 100; #warning 使用条件编译 #if // 可以通过终端来确认 cc -c main.c 生成main.o 可以查看到字节会比main敲的字节 少 804字节 // 通过条件编译 系统会把条件满足的编译成二进制,不满足的条件 不会编译 其实就是把不满足的代码删掉 /* // 预处理指令什么时候执行 ? 编译之前  变量什么时候定义? 执行了才会定义 // 注意点: 条件编译不能用来判断变量, 因为不在同一个生命周期 // 概况: 君生我未生,我生君已老 // 没有缘分 // 一般情况下, 条件编译 是 和宏电一结合在一起使用的// 编译之前 执行#if SCORE == 100printf;printf("发多大红花n");#elif SCORE == 90printf;printf("发朵小红花n");#elseprintf;printf;#endif // 作为结束符号 */ #warning 测试和发布阶段的输出#if DEBUG == 0 char *name = "lyh"; char *pwd = "123456";#else char *name = NULL; char *pwd = NULL;#endif // printf("name = %s, pwd = %sn",name,pwd); YHLog("name = %s, pwd = %sn",name,pwd); return 0;}
pragma mark — 07 禁止应用横屏
苹果手机是默认三个方向的
Portrait , Landscape Left, Landscape Right
在General中的Device Orientation中的Landscape Left和Landscape Right不勾选就好了
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 - 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 - 03
  • 视图的生命周期
1、 alloc 创建对象,分配空间
2、 init (initWithNibName) 初始化对象,初始化数据
3、 loadView 从nib载入视图 ,除非你没有使用xib文件创建视图
4、 viewDidLoad 载入完成,可以进行自定义数据以及动态创建其他控件
5、 viewWillAppear视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
6、 viewDidAppear 视图已在屏幕上渲染完成
7、viewWillDisappear 视图将被从屏幕上移除之前执行
8、viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了
9、dealloc 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放.
pragma mark - 02 tableViewCell的刷新
全局刷新:[self.tableView reloadData];
局部刷新:NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];
[self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationBottom];
//刷新第 0 组的第 row 行
pragma mark -- 06 UITableView 滑动遇到的小问题
  • UITableView 滑动不到最底部,结果发现是没有减去标签栏的高度
//必须要把49:标签栏的高度减去
_tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 99, self.view.mj_width,  self.view.mj_height - 99 - 49) style:UITableViewStylePlain];
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时间,线程太多会降低系统的运行性能

查看提示

01 tableView的编辑状态
02 tableViewCell的刷新
03 获取沙盒各个文件路径
04 计算文字尺寸
05 UINavigationController pop移除控制器的三个方法
06 Modal 的两个方法(都带有回调方法的)
07 initailize、load 方法的区别
08 重要方法
09 UICollectionView相关知识
10 判断系统版本
11 Xcode 模拟器上的一些快捷键
12 块遍历
13 自动布局UIButton 和 UILabel
14.测试某段代码执行效率
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];
}
TAG标签:
版权声明:本文由必威发布于必威-编程,转载请注明出处:pragma mark - 04 计算文字尺寸必威:,pragma mark —