1,注意,如果在main函数里面使用C++类,除了要包含头文件以外,最重要的是记得把main.m改成main.mm,否则会报一些奇怪的错误。所以,任何时候我们使用c++,如果报奇怪的错误,那就要提醒自己是不是把相应的源文件改成.mm后缀了。其它引用此类的文件有时候也要改成.mm文件。
2,我理解的@property特别简单,他就是setter和getter,就是在{}中的实例变量在。h中实例变量下面{}外,在用@property声明一遍,这是这个变量的使用方法,其中时设置和获得,可以一样的名字,也可以相似的名字。尽量一样,而修饰assign就是修饰给变量起了一个别名,但是对于变量时什么类型有规定,一般是int,float,等类型,其他类型大多数用retain.
3,@synthesize name = _name; //这句话,编译器发现你没有定义任何getter和setter,所以会同时会你生成getter和setter
objc和C++是类似的,如果你自己的类本身生成了getter方法或者setter方法,编译器就不会为你生成,如果没有哪个则编译器久自动补充那个,与C++的构造函数的特性非常相似。
4,@property就是对于实例变量的get和set方法,从而影响实例变量变成了公有的成员变成(C++)。
5
- self.nameVarPtr = [[ObjectName alloc] init]
- nameVarPtr = [[ObjectName alloc] init]
self.nameVarPtr=xxx 这种赋值方式等价于调用 [self setnameVarPtr:xxx], 而setnameVarPtr:xxx的方法的实现又是依赖于@property的属性的,比如retain,assign等属性。
nameVarPtr = xxx 的赋值方式,仅仅是对一个指针进行赋值。nameVarPtr仅仅是一个指针变量,记录了xxx的地址。在这个过程中不会调用setter方法,不会调用setter方法,就和@property没有关系,从而,也和retain,assign等属性没有关系。这种赋值方式就是一个简单的指针赋值。
6,在bojc中所有的申请的空间都有引用计数,如果按规定用self则引用计数发生改变(+1),如果不用self则相当于直接复制,引用计数没有改变,当release时,用self的则引用计数直接-1,不用的则释放,如果用的是retain特性,则,另一个指针的空间出现漏洞!。
7,MyClass.h
@interface MyClass : NSObject {
MyObject * _myObject;
}
@property (nonatomic, retain) MyObject *myObject;
@end
MyClass.m
@synthesize myObject = _myObject;
OK, 你现在再试下, 如果你用self._myObject = aMyObject; 或者 myObject = aMyObject; 你会得到一个错误, 为什么呢, 这里就是和Obj-c的存取方法有关了. 说白了很简单 , 大家都知道, @property (nonatomic, retain) MyObject *myObject; 是为一个属性设置存取方法, 只是平时我们用的方法名和属性名是一样的,现在你把它写成不同的名字, 就会很清楚了. _myObject是属性本身, myObject是存取方法名。
8,如果你想在其它类访问对象属性, 而不是通过存取方法, 你可以用myClass -> myObject来访问, 这样是直接访问对象本身, 不过你先要把myObject设成@public. 但这个是官方不提倡的。
9,故事板中的scene和segue:每一个视图控制器都会对应一个scene,scene可以理解为一个界面或者屏幕,在这个界面或者屏幕中有很多控件,相当于一个xib,scene时通过segue连接的,segue不但定义了scene之间的跳转方式,还体现了scene之间的关系。
10,