[BS] 小知识点总结-05

1.

不论UIWindow的rootViewController是navC、tabBarC还是VC,也不管modalVC和rootVC中间隔着多少个VC,但是modal出来的视图,其UI结构一定是这样:

先是UIWindow,然后是跳转用的完全透明的UITransitionView,然后直接就是modalVC的view。如果将modalVC.view.backgroundColor设置为clearColor,那么将直接看到的是window的颜色。

综上:通过modal形式弹出控制器,如果不需要动画(animated:NO),完全可以使用一个UIView来替代。

modal控制器UI层级图:

2. 关于for循环的 int i = 0;

for(int i = 0; i<10; i++) { //循环体 }

int i = 0;是定义在for代码块里面,但是在循环体外部,不会被循环的局部变量,出了for循环的代码块就不能再使用了。

i++;代码被定义在循环体内部,每次执行完循环代码,也会执行一次i++;

类似:

{//for代码块

   int i = 0;

while(i<10)

{//循环体

printf("C99-for写法\n");

i++;

}

}

3. 设置访问僵尸对象让Xcode立即报错

4. ARC和MRC混编:  -fno-objc-arc 和 -fobjc-arc

可以在Build Phases中的Compile Sources中加入编译标记-fno-objc-arc,确实可行,但是文件好多,这种方式适合文件比较少的情况,文件多了难道我们要一个一个加嘛,这 时候我们可以借助一个工具xproj,这是一个脚本,可以很方便的给某个文件夹内的文件添加编译标记,具体使用方法我们看项目主页就行了,既可以给ARC 项目添加MRC标记(-fno-objc-arc),也可以给MRC项目添加ARC标记(-fobjc-arc)。

5. 用条件编译判断当前是ARC还是MRC

//通过条件编译判断当前编译环境是ARC还是MRC

#if __has_feature(objc_arc)

NSLog(@"当前是arc编译环境");

#else

NSLog(@"当前是非arc编译环境");

#endif

6. 使用宏Macro的注意点

  (1). 在宏中如果一行代码写不下,可使用\来拼接

#define  Dispatch_once    static dispatch_once_t onceToken;\        //加个反斜杠可管到下一行

dispatch_once(&onceToken, ^{\

_instance = [super allocWithZone:zone];\

});           //最后一行不要反斜杠

  (2)带参数的宏

  A. 带数字参数的宏:在编译预处理时,将宏名替换成右侧字符串,并且将 字符串中的参数 用 宏名后边括号里的参数替换。如果右侧出现左侧参数无法替换的字符,则直接报错。宏名和参数列表之间不能有空格,否则空格后面的所有字符串都作为替换的字符串;在定义宏时,一般用一个小括号括住右边字符串的参数。

  #define ADD(a,b)  (a)+(b)   //合法,传入的参数可以替换右侧字符串

  #define ADD(a,b)  Add:(a)+(b)  //不合法。 右侧Add在左侧没有对应的参数替换

  B. 带字符参数的宏: #define  SayHi(arg)  Hi,##arg!     SayHi(world)表示将SayHi替换成Hi,##arg!表达式,并用字符参数world来替换其中的##arg  所以结果是 Hi,world!

  (3) 通过条件编译判断当前编译环境是ARC还是MRC

  #if __has_feature(objc_arc)

      NSLog(@"当前是arc编译环境");

  #else

      NSLog(@"当前是非arc编译环境");

  #endif

(4)宏中不能随便使用#号,宏里面是不准使用条件编译,因为条件编译是以#if开头,宏里面#后面跟的单词,会自动转译成字符串。就是说#if会被变为字符串“if”,而失去条件编译的职能。故宏中使用条件编译,直接报错。但是,条件编译中可以使用宏,而且经常用。

  (5) 宏定义:http://www.cnblogs.com/mjios/archive/2013/03/20/2969817.html

    条件编译:http://www.cnblogs.com/mjios/archive/2013/03/20/2971275.html

    文件包含:http://www.cnblogs.com/mjios/archive/2013/03/20/2971575.html

7.

将OC中任何一个对象转成字符串类型,只需要调用它的description方法即可NSString *objStr = [obj description];

8.

在TableView和CollectionView的数据源方法cellForRowAtIndexPath或cellForItemAtIndexPath中,如果想让某个UI控件只添加一次,除了使用懒加载,还可以使用如下方法进行:

NSInteger const tag = 10;  //定义一个不可变的tag

UILabel *lbl = (UILabel *)[cell.contentView viewWithTag:tag];

if (lbl == nil) { //确保添加只一次,最好的做法是自定义cell,然后懒加载来确保只添加一次

lbl = [[UILabel alloc] init];

[cell.contentView addSubview:lbl];

}

[BS] 小知识点总结-05的更多相关文章

  1. [BS] 小知识点总结-04

    1. ios新知识学习思路: 在开发过程中如果遇到某种新需求以前从未做过,例如改变textField的Placeholder颜色,有如下思路和途径: 1.1 在Storyboard/Xib辅助编辑器A ...

  2. [BS] 小知识点总结-03

    1.Autolayout中“constrain to margins” Autolayout中的页面边距的问题ios8以后的UIView增加了layoutMargins属性,在Storyboard/I ...

  3. [BS] 小知识点总结-02

    1.  dispatch_GCD 可让某操作延迟x秒执行 //模拟网速慢,延迟3s返回数据(就会导致右侧数据和左侧标签不对应) dispatch_after(dispatch_time(DISPATC ...

  4. [BS] 小知识点总结-01

    1. UIImageView *imgView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"MainTitle&quo ...

  5. android 小知识点

    小知识点总结 1. android中MotionEvent.ACTION_CANCEL事件如何被触发? 对于这个问题,android文档的说明很简短,想看明白很难.国外一网页说的还比较详细,写在这里分 ...

  6. 刚接触Linux,菜鸟必备的小知识点(一)

    身为一个将要大四的学生,而且还是学计算机的没有接触过linux简直是羞愧难当.这个假期做了一个软件测试员,必须要熟悉linux的操作,所以对于我这个菜鸟我也就说几点比较重要的小知识点吧. 第一.cd指 ...

  7. Java学习过程中的总结的小知识点(长期更新)

    Java学习过程中的总结的小知识点 (主要是自己不会的知识和容易搞错的东西) 计算某个程序运行的时间 long stime=System.currentTimeMillis(); copy3(file ...

  8. 【转】HTML5的小知识点小集合

    html5的小知识点小集合 html5知识   1.  Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于<h ...

  9. AngularJS的小知识点

    小知识点:$scope和$rootScope (1)每次使用ngController指令,都会调用控制器的创建函数,创建出一个控制器对象. (2)每次创建一个控制器对象,AngularJS都会创建一个 ...

随机推荐

  1. php 经典分页(推荐和laypage配合)

    学习地址:http://www.imooc.com/video/2463 <?php //(ps:推荐使用laypage整站式跳转来渲染分页按钮样式比较舒服http://laypage.layu ...

  2. 【翻译】Kinect v2程序设计(C++-) AudioBeam篇

    Kinect v2,Microphone Array可以用来对于水平面音源方向的推测(AudioBeam)和语音识别(Speech Recognition).这一节是介绍如何取得AudioBeam. ...

  3. MySql练习+加源代码

    一.设有一个数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1 ...

  4. 6.PHP内核探索:Zend引擎

    相信很多人都听说过 Zend Engine 这个名词,也有很多人知道 Zend Engine 就是 PHP 语言的核心,但若要问一句:Zend Engine 到底存在于何处?或者说,Zend Engi ...

  5. Python操作MySQL以及中文乱码的问题

    Python操作MySQL需要安装Python-MySQL可以从网上搜索一下,和一般的Python包一样安装 安装好之后,模块名字叫做MySQLdb ,在Window和Linux环境下都可以使用,试验 ...

  6. hbase体系结构以及说明

    HMaster:数据库总控节点 HRegionServer:通常是一个物理节点即一台单独的计算机,一个HRegionServer包含多个HRegion,假如一个表有一亿行数据,那么可能会分散在一个Re ...

  7. myeclipse调式与属性显示

    最近做项目的时候发现一个奇怪的东西,当我用myeclipse调式时,调式窗口显示实体user所关联的role的对象属性是空的,但是,从syst打印出来是有的,最近感到很奇怪,后来发现这只是调式的一种显 ...

  8. 蓝牙的AVCTP协议笔记

    1.概述     AVCTP协议描述了蓝牙设备间Audio/Video的控制信号交换的格式和机制,它是一个总体的协议,具体的控制信息由其指定的协议(如AVRCP)实现,AVCTP本身只指定控制comm ...

  9. cordova插件iOS平台实战开发注意点

    cordova插件是其设计理念的精髓部分,创建并使用自定义插件也是一件比较容易的事.但在这个过程中也容易进入一些误区或者有一些错误的理解,下面从笔者实际开发中遇到的问题出发,对其中的一些注意点和重要概 ...

  10. Qt调用Server SQL中的存储过程

    Server SQL中的存储过程如下: CREATE procedure PINSERTPC @pcnum int, @pcname varchar(50), @pctype int, @ipaddr ...