Objective-C语法
Just_a_GirL
这个作者很懒,什么都没留下…
展开
-
Objective-C-语法积累
1.#import 这里 Foundation 指的是NSObject 的父类,Foundation.h是框架 2.Nonatomic means calling this setter and getter that go along with this property is not thread safe. 非原子是说同该属性一同的setter和getter不是线程安全原创 2015-12-09 10:42:12 · 411 阅读 · 1 评论 -
关于YES、NO和TRUE、FLASE的区别
一般编程我们都默认非零值就是TRUE,为零时FALSE。 那么在Objective-C中,又出现了YES、NO。咋回事呢。是酱紫滴,OC中用一个字节,即8位来表示BOOL值,也就是取一个数的低八位。那么对于8960这个数,它明显是非零数字,但是,但是!它的低八位都是零,所以它是NO。 注意一点啊,我这里说它是YES、NO是指,你在赋值给一个BOOL型数据时的值。 比如BOO原创 2016-03-13 16:10:42 · 6775 阅读 · 1 评论 -
KVC
KVC Key-Value-CodingsetValue:forKey: setValue:forKeyPath:valueForKey: valueForKeyPath:是个比较有用的东西,大家都这么说,嗯,那我慢慢体会。听说用它可以设置和访问私有的成员变量,嗯,就是说只要你定义了一个变量就逃不过他的火眼金睛。除非你在.m里面定义的全局变量。它可以修改一些系统设为readonly的属性。还有原创 2016-03-27 20:45:15 · 273 阅读 · 0 评论 -
多线程之延迟操作
有三个办法:[NSThread sleepForTimeInterval:]; 但是这个方法并不好,因为它就是相当于睡眠了给定的时间不走了,所以会卡住当前线程。performSelector:withObject:afterDelay: 这个方法直接在主线程中操作,但是不会卡住线程,程序依次执行,等过了指定延迟时间再回来执行相应操作。diapatch_after(dispatch_time原创 2016-03-22 11:50:34 · 4721 阅读 · 0 评论 -
Foundation之NSString
好吧,让我一点一点变强大,每一天都被很小的一个错误折磨……注意那个图的输入!!!!长和宽要注意!!!!! dfs的出口要注意!!!! 代码:#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>using namespace std;int n,m;int sx,sy,ex,ey;char room原创 2016-03-22 11:35:42 · 275 阅读 · 0 评论 -
instancetype和id
id是一个可以指向任何对象的指针,可以用来声明变量或者作为返回值但是instancetype只能作为返回值。但它有一个优点是可以检查指向的OC对象是否是本类型,如果不是编译器会发出警告。原创 2016-03-21 21:52:09 · 228 阅读 · 0 评论 -
内存管理之ARC
有了ARC以后,我们不需要再去手动release、autorelease。编译器自动帮我们在适当的地方加上这些操作,所以这是编译器的一个特性。那么ARC的判断原则是什么呢- 只要有一个强指针变量指向对象,对象就会保存在内存中。(默认情况下所有指针变量都是强指针)原创 2016-03-19 18:55:11 · 272 阅读 · 0 评论 -
内存管理之引用计数
我们都知道OC才用引用计数规则来管理内存。 就是持有一个对象时,引用计数加1,不需要时就减1。等到引用计数为0时,证明不需要这个对象了,所以,系统会自动回收这块内存,,即自动调用dealloc方法。比如: Person *p = [[Person alloc] init]; 此时内存状态是这样的。 引用计数其实就是表示,此时有几个东西在用它。那么当情况变成这样的时候呢。 (细节地方不写了,原创 2016-03-19 11:01:11 · 841 阅读 · 0 评论 -
循环引用
关于循环引用,先说一句很重要的思路,搞清楚是怎么回事,要不老忘记,容易整蒙了。其实就是 A.point = B; ① B.point = A; ② 当A、B的point的属性都是strong参数时,那么①会导致B的引用计数加1,②会导致A的引用计数加1。所以A、B的引用计数此时都为1,无法释放,造成内存泄露,这就是循环引用,之前所说的概念A指B,B指A,容易混淆概念,本质上是引用计数的原因。原创 2016-03-19 15:58:33 · 304 阅读 · 0 评论 -
内存管理之autorelease
之前一直误以为,只要在下面对的大括号中写一些对象就可以自动释放。 @autorelease {} 大错特错XXXX首先 ,你只在这个autorelease里面创建对面,自动释放池是不会帮你管理的,只有你向某对象发送autorelease 消息才可以把该对象放到池子里,等到池子释放的时候再对池子里的所有东西进行一次release操作。注意这句话,只是对池子里的对象进行一次release,并不是将他原创 2016-03-19 18:36:36 · 328 阅读 · 0 评论 -
@class、#import、#include
#import 是个预处理宏用#import导入其他文件,会在编译时期,进行整个.h文件的拷贝。如果多个文件都导入了这个文件,那么一旦被导入文件有所改动,那么,所有导入该文件的类都需要重新编译。所以,如果只是想声明一个类,那么只用@class就可以。用#import会增加编译时间。@class A 就是说明A是一个类 @class还可以解决循环依赖的问题,比如A导入B,同时,B又导入A@class原创 2016-03-19 15:48:41 · 303 阅读 · 0 评论 -
野指针与空指针
产生野指针的原因主要为以下两点: (1)定义指针变量时没有初始化,这个时候它是随机指向一个地方的,不为NULL (2)指针指向的内存被释放之后,没有置为nil,即指向了不可用内存空指针是指原创 2016-03-17 12:43:12 · 506 阅读 · 0 评论 -
野指针-随机crash问题
是的,你没有看错,要说的就是提高iOS的crash率!欲让其灭亡先让其疯狂,我们当然不是人为制造crash,准确地说,是使隐藏的随机性crash暴露出来,提高测试时的crash率,从而降低版本发布后的crash率。写c、c++代码的同学应该都清楚,crash最多的原因通常有两种,一种是多线程,一种是野指针。这两种crash都带随机性,而且这两种crash有相当一部分都很难区分,甚至大量的crash只转载 2016-03-17 12:55:45 · 2034 阅读 · 0 评论 -
nil、Nil、NULL、NSNull的区别
nil、Nil、NULL、NSNull的区别 nil:指向一个对象的空指针 Nil:指向一个类的空指针 NULL:指向其他类型(如:基本类型、C类型)的空指针 NSNull:通常表示集合中的空值举例: NSURL *url = nil; Class class = Nil; int *pointerInt = NULL; NSArray *array = [NSAr转载 2016-03-17 12:44:16 · 354 阅读 · 0 评论 -
block
block是可以截取自动变量的匿名函数,它是iOS中一种特殊的数据类型。 一般应用于 - 动画 - 多线程 - 集合遍历 - 回调(网络请求)在将block作为参数传递的一个技巧写法void test(int (^myBlock) (int num1, double num2, char num3)){}这样去定义参数时,看起来很麻烦,但是调用test函数时,会自动帮你生成参数,不需要原创 2016-03-21 21:11:06 · 306 阅读 · 0 评论