引用自 http://www.cocoachina.com/ios/20160323/15770.htmlhtml
1.循环引用的产生和解决ios
产生:对象A和对象B相互引用了对方做为本身的成员变量,只有本身销毁的时候才能将成员变量的引用计数减1。对象A的销毁依赖于对象B的销毁,同时对象B销毁也依赖与对象A的销毁,从而造成循环引用,此时,即便外界没有任何指针访问它,它也没法释放。数组
解决:①事先知道存在循环引用的地方,在合理的位置主动断开一个引用,是对象回收;②使用弱引用的方法。ui
2.#include与#import的区别,#import 与@class 的区别atom
3.关键词含义spa
@public:对象的实例变量的做用域在任意地方均可以被访问 ;
@protected:对象的实例变量做用域在本类和子类均可以被访问 ;指针
@private:实例变量的做用域只能在本类(自身)中访问 .orm
@propertyhtm
@implementation对象
4.怎样使用performSelector传入3个以上参数,其中一个为结构体。
由于系统提供的performSelector的API中,并无提供三个参数。所以,咱们只能传数组或者字典,可是数组或者字典只有存入对象类型,而结构体并非对象类型,咱们只能经过对象放入结构做为属性来传过去了.
- (id)performSelector:(SEL)aSelector; - (id)performSelector:(SEL)aSelector withObject:(id)object; - (id)performSelector:(SEL)aSelector withObject: (id)object1 withObject:(id)object2;
具体实现以下:
typedef struct HYBStruct { int a; int b; } *my_struct; @interface HYBObject : NSObject @property (nonatomic, assign) my_struct arg3; @property (nonatomic, copy) NSString *arg1; @property (nonatomic, copy) NSString *arg2; @end @implementation HYBObject 。 // 在堆上分配的内存,咱们要手动释放掉 - (void)dealloc { free(self.arg3); } @end
my_struct str = (my_struct)(malloc(sizeof(my_struct))); str->a = 1; str->b = 2; HYBObject *obj = [[HYBObject alloc] init]; obj.arg1 = @"arg1"; obj.arg2 = @"arg2"; obj.arg3 = str; [self performSelector:@selector(call:) withObject:obj]; // 在回调时获得正确的数据的 - (void)call:(HYBObject *)obj { NSLog(@"%d %d", obj.arg3->a, obj.arg3->b); }
5.