【筆記】iOS開發基礎筆記<四>

引用自 http://www.cocoachina.com/ios/20160323/15770.htmlhtml

1.循環引用的產生和解決ios

產生:對象A和對象B相互引用了對方做爲本身的成員變量,只有本身銷燬的時候才能將成員變量的引用計數減1。對象A的銷燬依賴於對象B的銷燬,同時對象B銷燬也依賴與對象A的銷燬,從而造成循環引用,此時,即便外界沒有任何指針訪問它,它也沒法釋放。數組

解決:①事先知道存在循環引用的地方,在合理的位置主動斷開一個引用,是對象回收;②使用弱引用的方法。ui

2.#include#import的區別,#import @class 的區別atom

  • #include 和#import其效果相同,都是查詢類中定義的行爲(方法);
  • #import不會引發交叉編譯,確保頭文件只會被導入一次;
  • @class 的代表,只定 義了類的名稱,而具體類的行爲是未知的,通常用於.h 文件;
  • @class 比#import 編譯效率更高。@class 和#import 的主要區別在於解決引用死鎖的問題,防止進程阻塞。

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.

相關文章
相關標籤/搜索