标签:
引用自 http://www.cocoachina.com/ios/20160323/15770.html
1.循环引用的产生和解决
产生:对象A和对象B相互引用了对方作为自己的成员变量,只有自己销毁的时候才能将成员变量的引用计数减1。对象A的销毁依赖于对象B的销毁,同时对象B销毁也依赖与对象A的销毁,从而形成循环引用,此时,即使外界没有任何指针访问它,它也无法释放。
解决:①事先知道存在循环引用的地方,在合理的位置主动断开一个引用,是对象回收;②使用弱引用的方法。
2.#include与#import的区别,#import 与@class 的区别
3.关键词含义
@public:对象的实例变量的作用域在任意地方都可以被访问 ;
@protected:对象的实例变量作用域在本类和子类都可以被访问 ;
@private:实例变量的作用域只能在本类(自身)中访问 .
@property
@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.
标签:
原文地址:http://www.cnblogs.com/-yfan/p/5405490.html