iOS小点记

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

  1. self.nameVarPtr = [[ObjectName alloc] init]   
  1. 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,

 @synchronized,代表这个方法加锁, 相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程例如B正在用这个方法,有的话要等正在使用synchronized方法的线程B运行完这个方法后再运行此线程A,没有的话,直接运行。它包括两种用法:synchronized 方法和 synchronized 块。

@synchronized 方法控制对类(一般在IOS中用在单例中)的访问:每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法锁方能执行,否则所属就会发生线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。这种机制确保了同一时刻对于每一个类,至多只有一个处于可执行状态,从而有效避免了类成员变量的访问冲突(只要所有可能访问类的方法均被声明为 synchronized)。

synchronized 块:

  @通过 synchronized关键字 来声明synchronized 块。语法如下:
  @synchronized(syncObject) {  }
  synchronized 块是这样一个代码块,其中的代码必须获得对象 syncObject (如前所述,可以是类实例或类)的锁方能执行,具体机制同前所述。由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值