OC basic
不能在栈上分配对象
//Interface type cannot be statically allocated
NSString stackString;
因为对象所占内存总是分配在“堆空间”中,而不会分配在栈上。
分配在堆中的内存必须直接管理(引用计数),分配在栈上用于保存变量的内存则会在其栈帧弹出时自动清理。
字面量数组
使用语法糖创建数组,若数组元素有 nil,会抛出异常。因为语法糖相当于先创建一个数组,然后把方括号里的所有对象都加到这数组中。
id o1 = @"o1";
id o2 = nil;
id o3 = @"03";
NSArray *arrayA = [NSArray arrayWithObjects:o1,o2,o3, nil];
NSArray *arrayB = @[o1,o2,o3];
arrayA 只有一个元素,arrayB 会crash。

声明一个只在某一个某个文件中使用的常量
///只在本文件使用的常量
// 1. const 修饰符从右至左,因此下面是“一个常量,这个常量是指针,指向NSString对象”
// 2. 编译器不会创建符号,而是把所有遇到的变量都替换为常值。
static NSString *const klocalConstantStr = @"klocalConstantStr";
要注意 const 修饰符的位置。 static 的意思是该变量仅在定义此变量的编译单元中可见。
声明一个对外公开的常量
在头文件中,如下声明:
///需要向外公开某个常量
/// 在全局符号表里
extern NSString *const TGSringConst;
在实现文件(.m)中,实现这个常量。
//这个常量必须要定义,只能定义一次
//在数据段为字符串分配存储空间
NSString *const TGSringConst = @"TGSringConst";
这样子声明的变量会在全局符号表里。
这个方法比#define好,因为有类型信息,且不会重复定义。
参考
- Matt Galloway, 爱飞翔. Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法[J]. 中国科技信息, 2014(6):131-131.
- OCBasic
OC basic的更多相关文章
- OC第七节——内存管理
戏言: iOS开发已经到了一个ARC时代,一般不需要我们过多的去关注内存是怎么分配,怎么管理的.很长一段时间,我也不知道内存管理是什么鬼,但如果遇到这方面的问题,却找不到解决办法确实很头疼的.So,还 ...
- iOS9基础知识(OC)笔记
1月16日 Objective C(20世纪80年代初) 一.OC语言概述 1.1985年,Steve Jobs成立了NeXT公司 2.1996年,12月20日,苹果公司宣布收购了NeXT ...
- OC的内存管理(一)
在OC中当一个APP使用的内存超过20M,则系统会向该APP发送 Memory Warning消息,收到此消息后,需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等,否则程序会 ...
- Moving Swiftly(从OC切换到Swift)
Moving Swiftlyhtml, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0 ...
- OC内存管理-黄金法则
1.内存管理-黄金法则 The basic rule to apply is everything that increases the reference counter with alloc, [ ...
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- 用C语言封装OC对象(耐心阅读,非常重要)
用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...
- 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比
C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...
- 嵌入式&iOS:回调函数(C)与block(OC)回调对比
学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...
随机推荐
- 设计模式-生成者模式之c#代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- asp.net core 视图组件化
视图组件可以通过partial view或viewcomponent实现 partialview https://docs.microsoft.com/zh-cn/aspnet/core/mvc/vi ...
- struts2 的 ServletActionContext 和 actionContext,服务器代码测试, redirect 、dispatcher、chain、redirectAction
一.ServletActionContext 和 actionContext HttpServletRequest request=ServletActionContext.getRequest() ...
- js把一个数组插入到另一个数组的指定位置
var arr1 = ['a', 'b', 'c']; var arr2 = ['1', '2', '3']; // 把arr2 变成一个适合splice的数组(包含splice前2个参数的数组) a ...
- java如何从一段html代码中获取图片的src路径
java如何从一段html代码中获取图片的src路径 package com.cellstrain.icell.Test; import java.util.ArrayList;import java ...
- (转)SQL Server 2008无法修改表的解决办法
转自:http://www.soaspx.com/dotnet/sql/mssql/sql2008/sqlserver2008_20121010_9683.html 在SQL Server 2008 ...
- hbase使用MapReduce操作1(基本增删改查)
操作代码 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; import org.apach ...
- 转载:<context-param>与<init-param>的区别与作用
<context-param>的作用:web.xml的配置中<context-param>配置作用1.启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web ...
- Checkpoint--查看各DB上的脏页
可以使用sys.dm_os_buffer_descriptors来看数据页在buffer pool中的状态,其中is_modified来标示数据页是否为脏页 --------------------- ...
- [转载]将json字符串转换成json对象
例如: JSON字符串: var str1 = '{ "name": "cxh", "sex": "man" }'; J ...