1..h头文件 .m源文件 .mm c++源文件
2.函数声明
-(void) helloWorld:(BOOL)ishelloworld{} 等价于
void helloWorld(bool ishelloworld) {}
前面的-表示实例才可以调用的方法。+表示静态方法,不需要实例化都可以调用。
3.object-c函数
-(void)func:(BOOL)para1 paraName1:(BOOL)para2
函数名func可以看作参数1的名字
4.类声明以@interface开头。通常在.h里面定义,implementation定义包含实现,定义在.m里面,成员变量定义在源文件中就是private的
@interface A : B <C> {}表示A继承B,实现C协议。协议类似于java里面的接口。此方法模拟多继承
5.protocol对应java里面的接口,区别在于可以定义方法在子类是否必须实现。
optional是可选的
required是必须实现的
6.初始化一个对象:[[XXX alloc] init]
7.[[IOSIAPManager sharedManager] setSTIABDelegate:pDelegate];
表示使用IOSIAPManager的sharedManager静态方法 返回的对象的setSTIABDelegate方法,传入的参数是pDelegate
8.@“abc”表示将引用的字符串作为cocos的NSString处理。
9.只有成员变量有@public ,@protected ,@private修饰符,成员方法都是public的,变量默认是protected的
10.成员变量在.h里面声明相当于是public的,在.m里面声明相当于是private的。
11.@property int i;相当于声明getter和setter。在oc里面即使申明了public:int i,也无法通过obj.i来访问属性。可以在property()括号里面添加访问控制,具体有如下类型:
readwrite: 默认读写
readonly: 只读,没有set方法
retain: 引用计数增加1
assign: 引用计数不增加(默认)
strong: 和retain一样增加引用计数
weak: 和assign一样不增加引用计数
actiomic: 原子性,加了互斥锁的( 默认)
nonatomic:非原子性,不要加互斥锁
copy: 复制内存地址创建新对象,是浅拷贝。另外在NSArray之间copy,如果复制不可变对象,那么是retain方式的复制,也就是直接将引用系数+1。
对属性的访问方法:obj.i 等价于[obj i]
12.[]中括号表示一个方法调用,有2种调用方法:[类名 类方法] 和[实例名 实例方法]
通常说消息,即给对象发送了一个消息。
C++写法:this->hello(true)
Oc写法:[self hello:YES]
13.NS***,苹果的一个函数库。
14.所有的类都继承于NSObject
15.强类型和弱类型。
变量类型为类名指针就为强类型A* obj;
弱类型通过id定义id ibj;
16.SEL是选择器(selector)的一个类型,选择器就是指向函数的一个指针
17.Char数组与NSString之间可以通过stringWithCString:encoding来转换
18. include、import、@class
- include "" 与include <> 和c++里面区别一样。""表示用户目录下的文件。<>表示系统目录下的文件。
- include会引起 重复引用。比如class A,class B都引用了class C,class D若引用class A与class B就会报重复引用的错误。
- import,基本功能与include一样,但是解决了重复引用的问题。所以通常都用import。
- @class和c++里面的class A也差不多。用于解决交叉引用的问题。
19. 引用计数。
@property (nonatomic, strong) NSString *string1;//申明为strong,引用计数增加
@property (nonatomic, strong) NSString *string2;
self.string1 = [[NSString alloc] initWithUTF8String:"string 1"];
self.string2 = self.string1; //引用计数增加为2
self.string1 = nil; //引用计数减1
NSLog(@"String 2 = %@", self.string2);//输出String 2 = string 1
将string2定义为weak:@property (nonatomic, weak) NSString *string2;
输出为String 2 = (null)。内存已经释放,但是访问是安全的。
将string2定义为unsafe_unretained,在输出处crash。访问不安全。
20. UITableViewCell在绘制cell的时候要先判断cell是否存在,如果存在就循环利用,不存在再创建。可见cell的使用是回收循环使用的。