- 博客(23)
- 资源 (3)
- 收藏
- 关注
原创 pch配置路径
双击项目->选中target->选中Building Phase->搜索Prefix Header->将Precompile Prefix Head设置为YES->Prefix Header填写为$(SRCROOT)/黄色项目名字/PrefixHeader.pch
2018-05-11 01:59:29
329
原创 [tableView cellForRowAtIndexPath:indexPath]
此方法不可以用来获取每一行的cell高度,会提示EXC_BAD_ACESS错误
2018-04-13 19:30:37
768
原创 函数指针和函数指针类型
定义一个函数:int sum(int a,int b){ return a + b;}定义一个整型函数指针:int (*pfun)(int, int);类型起别名:typedef int (*pfun)(int, int);使用别名类型定义函数指针:pfun intFunP = sum;...
2018-04-09 12:36:37
2118
原创 主队列同步和主队列异步
主队列同步:在主线程上执行主队列同步会造成死锁被困住的现象主队列异步:不开新线程,让当前线程去执行主队列,由于只有一条线程执行这个主队列,那么是顺序执行...
2018-04-07 20:55:01
533
原创 异步串行对列和同步并行对列的特殊
异步串行对列:开启了新线程来顺序执行串行对列中的任务同步并行对列:虽然是并行对列,但是并未同时执行这两种方式都是按顺序执行对列中的任务...
2018-04-07 18:20:29
245
原创 同步并行对列
同步并行:由于没开新线程,那就只有当前线程去执行这些并发对列,由于只存在当前线程这一条线程去执行这些并行对列,那么这些对列只能按顺序执行下去...
2018-04-07 18:09:17
355
原创 串行、并发、并行、同步、异步
串行和并发和并行指的是任务的执行方式。串行:按顺序执行任务并发:cpu快速切换线程,看起来似乎像并行,其实是伪并行并行:同时执行多个任务同步:没有开启新的线程异步:开启了新的线程...
2018-04-07 17:01:41
395
原创 从子线程中回归到主线程中去执行selector方法
//从子线程中回归到主线程中去执行selector方法 [self performSelectorOnMainThread:@selector(updateUI:) withObject:image waitUntilDone:NO];
2018-04-07 01:08:38
427
原创 @synthesize的应用场景
1.在子类重新利用父类的属性重新设计子控件的排列的时候,需要在对应的.m文件声明一下。比如:tableViewCell@synthesize textLabel = _textLabel;@synthesize imageView = _imageView;2.同时重写属性的set和get方法时,原实例变量_name消失,存在name实例变量,需要用@synthesize name = _name...
2018-04-06 18:54:17
660
原创 互斥锁的认知
互斥锁用来将读写进行锁住,以防止其它线程提取进行进行完读写,自己线程往后延迟进行读写导致数据出现紊乱。注意点:借用一个对象的锁要注意借用的那个对象是个固定对象,不是固定对象的话,当第一条线程在执行的时候,第二条线程也能执行开锁区的代码,那就可能会造成同读同写,明明数据是变化了两次,结果只变化了一次的错误 while (1) {//UIView *view = [[UIView alloc] ini...
2018-04-06 17:33:27
225
原创 纯代码创建UINavigationController
#import "ViewController.h"@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // O...
2018-04-05 19:08:33
950
1
原创 泛型指针void *和id的区别
void *:c语言中的泛型指针,指代任意的指针类型(即int *,float *,int * *……)。当返回值是一个地址或者指针(其实指针本身就是地址)的时候,返回值的类型都可以用void *表示,也可以用此类型来定义任意类型的指针变量int a;int *p = &a;&a这个变量能够赋值给p这个变量,说明&a这个变量的类型也是int *,所以当返回&a的...
2018-04-04 12:18:11
650
原创 storyBoar的视图控制器跳转连线
1.show相当于push(替代废弃的push)2.present Modally相当于模态跳转(替代废弃的Modally)3.出栈到根视图控制器的代码:[self.navigationController popToRootViewControllerAnimated:YES];4.出栈到指定的视图控制器的代码:[self.navigationController popToViewContro...
2018-04-04 10:50:03
227
原创 block的循环引用
block属性用copy修饰(将栈block复制一份到堆block,之后将堆block的地址赋值给block指针,防止函数调用后释放了栈block后再调用block出现野指针错误)。这里使用person对象做说明从图中可以看出person对象对block有强引用之后,从下图中可以看出,又在block内部有个强指针p这样就形成了循环引用,可以定义一个相同类型的弱指针来解决循环引用...
2018-04-03 22:00:16
209
原创 深浅拷贝
当不可变对象进行copy,并没有进行真真的拷贝,因此是浅拷贝当不可变对象进行了mutableCopy,拷贝出来新的一份,因此是深拷贝可变对象无论进行copy还是mutableCopy都是深拷贝copy操作生成一个不可变的对象,mutableCopy操作生成一个可变的对象...
2018-03-18 18:30:40
257
原创 NSMutablexx属性最好用strong,最好别用copy。也最好别mutablexx = [mutableAnotherxx copy]
从下图可以看出,mutablexx = [mutableAnotherxx copy];//copy返回的id类型尽管和muStr1类型不一致,但是并未报错。那我们暂时用着,但是,但是,当我们使用[mutablexx appendString:@"出去"];的时候就出错了,这是因为mutablexx = [mutableAnotherxx copy];这一语句进行了copy操作之后,mutable...
2018-03-14 11:07:11
215
原创 const int *xx 和 int * const xx 的区别
1.先看const int *a;常量整型:说明指针所指向的那个变量的值是不能修改的。但是指针的指向是可以改变的 const int *a; int b; a = &b; //*a = 8;这是错误的,不能改变指针所指向的变量的值 b = 10; a = &b//可以改变指针的指向2....
2018-03-13 20:49:35
415
原创 UISearchBar修改占位符字体的颜色
最近学习searchBar的使用,遇到了修改占位符字体的颜色。在此记录下供自己和大家使用//通过kvc拿到到searchbar的文本框 UITextField *searchTextField = [customSearchBar valueForKey:@"_searchField"];//通过kvc改变搜索文本框的占位符字体颜色 [searchTextField setValue:...
2018-03-10 11:28:10
844
转载 self.title ;self.tabBarItem.title ;self.navigationItem.title 的区别
今天项目中遇到个相当愚蠢的问题,以前没注意到,今天总结下:大致意思和上面一样,导航栏title和tabBarItem的title不一致。我的做法是先设置self.tabBarItem.title = @"bb ";然后self.title = @"MyViewController1";结果就是下图:我查了一些资料:1.当self.
2017-12-30 09:24:58
385
Swift的使用,Using Swift with Cocoa and Objective-C(Swift4.0.3)
2018-03-18
Swift4.0.3官方原版文档The Swift Programming Language(Swift4.0.3)
2018-03-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人