1-http://blog.csdn.net/baxiaxx/article/details/7878338
performSelector延迟使用
2-http://blog.csdn.net/baxiaxx/article/details/7878110
~~~performSelector内存泄露
performSelector是一个很有用的函数,跟它打过不少交道,经过血与泪的教训,总结一下它的使用如下:
使用前先检测一下,
SEL testSelector = @selector(test:);
if([tester respondsToSelector:testSelector])
{
//如果响应就执行
[tester test:@"invoke test method"];
}
使用后,如果有必要,需要显示的调用cancelPreviousPerformRequestsWithTarget:selector:object: ,否则有可能产生内存泄露,而且这种内存泄露很难发现,因为它并不违反任何规则,所以一定要注意!
self performSelector:@selector(method1:) withObject:self.tableLayer afterDelay:3
将tableLayer的引用计数加1,执行完这个方法时,还会将tableLayer的引用计数减1
多次调用, 已经被调用但还没有执行,==》》内存泄露
3-http://www.cnblogs.com/geraldzhang/archive/2011/11/12/2246453.html
~~delegate属性使用assign的原因。
所有的引用计数系统,都存在循环应用
a[UITableViewController]创建并引用b[UITableView].
b[delegate是a]创建并引用c. -- delegate retain了 就无法释放这两个对象
c创建并引用b.
releasea
b和c永远留在内存中。
循环引用而产生的内存泄露也是Instrument,自己在设计使用delegate模式时,也要注意这点
~~~~~
iPhone开发中,动态调用类和方法:
NSClassFromString
NSSelectorFromString
正常来说,
id myObj = [[NSClassFromString(@"MySpecialClass") alloc] init];
和
id myObj = [[MySpecialClass alloc] init];
是一样的。但是,如果你的程序中并不存在MySpecialClass这个类,下面的写法会出错,而上面的写法只是返回一个空对象而已。
因此,在某些情况下,可以使用NSClassFromString来进行你不确定的类的初始化。
比如在iPhone中,NSTask可能就会出现这种情况,所以在你需要使用NSTask时,最好使用:
[[NSClassFromString(@"NSTask") .....]]
而不要直接使用[NSTask ...]这种写法。
NSClassFromString的好处是:
1 弱化连接,因此并不会把没有的Framework也link到程序中。
2 不需要使用import,因为类是动态加载的,只要存在就可以加载。
for (int c=0; c<[classNames count]; c++) {
NSString *className=[classNames objectAtIndex:c];
id class=[[NSClassFromString(className) alloc] init];
for (int i=0; i<[params count]; i++) {
[class performSelector:NSSelectorFromString([NSString stringWithFormat:@"setA%i",i])];
}
}
4-http://davychen.blog.51cto.com/3283671/653001 乱
--init初始化Controler,LazyLoad思想
--loadView,view为nil时,加载View
手动画Views,无xib
当有xib时候, 不调用loadView
viewDidLoad做后续加载,可以放数据初始化等
生命周期
+ (id)alloc
+ (id)allocWithZone:(NSZone *)zone
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
[ // 多选一
- (id)init
- (id)initWithCoder:(NSCoder *)aDecoder
]
- (void)loadView
- (void)viewDidLoad
//每次进入调用
- (void)viewWillAppear:(BOOL)animated
- (void)viewDidAppear:(BOOL)animated
5-http://blog.csdn.net/genios/article/details/7821133
xcode 4.5 new feature __ ios6 新特性
@‘X’--NSNumber
@{}--NSDictionary
@[]--NSArray
mutableCopy --Mutable版本
_songs[idx]--NSArray
_storage[key]--NSDictionary
~~CollectionView
照片墙显示 【delegate类似tableview】
~~embed segue
instantiateViewControllerWithIdentifier
container view
视图控制器添加一个子视图控制器