[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的更多相关文章
- [BS] 小知识点总结-04
1. ios新知识学习思路: 在开发过程中如果遇到某种新需求以前从未做过,例如改变textField的Placeholder颜色,有如下思路和途径: 1.1 在Storyboard/Xib辅助编辑器A ...
- [BS] 小知识点总结-03
1.Autolayout中“constrain to margins” Autolayout中的页面边距的问题ios8以后的UIView增加了layoutMargins属性,在Storyboard/I ...
- [BS] 小知识点总结-02
1. dispatch_GCD 可让某操作延迟x秒执行 //模拟网速慢,延迟3s返回数据(就会导致右侧数据和左侧标签不对应) dispatch_after(dispatch_time(DISPATC ...
- [BS] 小知识点总结-01
1. UIImageView *imgView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"MainTitle&quo ...
- android 小知识点
小知识点总结 1. android中MotionEvent.ACTION_CANCEL事件如何被触发? 对于这个问题,android文档的说明很简短,想看明白很难.国外一网页说的还比较详细,写在这里分 ...
- 刚接触Linux,菜鸟必备的小知识点(一)
身为一个将要大四的学生,而且还是学计算机的没有接触过linux简直是羞愧难当.这个假期做了一个软件测试员,必须要熟悉linux的操作,所以对于我这个菜鸟我也就说几点比较重要的小知识点吧. 第一.cd指 ...
- Java学习过程中的总结的小知识点(长期更新)
Java学习过程中的总结的小知识点 (主要是自己不会的知识和容易搞错的东西) 计算某个程序运行的时间 long stime=System.currentTimeMillis(); copy3(file ...
- 【转】HTML5的小知识点小集合
html5的小知识点小集合 html5知识 1. Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于<h ...
- AngularJS的小知识点
小知识点:$scope和$rootScope (1)每次使用ngController指令,都会调用控制器的创建函数,创建出一个控制器对象. (2)每次创建一个控制器对象,AngularJS都会创建一个 ...
随机推荐
- KMS错误代码收集
Q:KMS认证时,错误讯息代码0x80070005? A:-0x80070005:存取遭拒.要求的动作要求较高的权限. -这个错误讯息,代表您在执行命令提示字元(cmd)时,没有以系统管理员的身份执行 ...
- nmap 高级扫描用法
nmap提供了四项基本功能(主机发现.端口扫描.服务与版本侦测.OS侦测)及丰富的脚本库.Nmap既能应用于简单的网络信息扫描,也能用在高级.复杂.特定的环境中:例如扫描互联网上大量的主机:绕开防火墙 ...
- flowvisor test(1)
参考: Flowvisor 入门 杨帅老师:mininet+FlowVisor+ODL环境搭建及实验1 安装: 参考: 1.Flowvisor安装 2.Mininet安装 3.官网,Floodligh ...
- mysq数据库再次理解
1.表中的一条记录就是一个object,object有很多属性,对应表中的字段.object的属性对应的值就是字段值 2.外键是关联表关系用的.表关系的确立只能通过外键 但更高效的策略是,在数据库中部 ...
- 常用Ubuntu 命令
sudo apt-get updatesudo apt-get upgrade以下2選1sudo apt-get install ubuntu-desktop如果你只想安装必要的桌面管理软件而不想安装 ...
- IT运维的五大基础知识
IT运维的五大基础知识 | 浏览:331 | 更新:2014-09-25 11:36 IT运维对于很多企业都很重要,接下来运维的一些基础知识天天客服IT运维总监龙少文,就给大家介绍下IT运维的基础知识 ...
- ExtJS笔记3 MVC Architecture
MVC Architecture MVC架构 Contents File Structure Creating the application in app.js Defining a Contr ...
- Xamarin 示例Standard Controls报错:xamarin Failed to compile interface file. See Build Output for details
Standard Controls 示例下载地址: http://developer.xamarin.com/content/StandardControls/ Xamarin官网上的IOS示例“St ...
- 详解在bash脚本中如何获取自身路径
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 这是stac ...
- HTML: 字符實體
在HTML編寫中,有些字符不適合直接在代碼中寫出,比如>,<, (space空格),",',&等等,這時我們按照一定的格式將它們寫出,比如(大於)> 符號,我們用 ...