引用自 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.