V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  iOran  ›  全部回复第 5 页 / 共 12 页
回复总数  238
1  2  3  4  5  6  7  8  9  10 ... 12  
2017-03-02 12:54:36 +08:00
回复了 CMGS 创建的主题 酷工作 [北京/长沙] ENJOY 平台组招人啦
彭大, base 在长沙的有些啥岗位?
2017-02-08 19:23:17 +08:00
回复了 woweiqingkuang 创建的主题 推广 今天免费送书《 Python 语言及其应用》,要的同学举爪 ...
3375.16
2017-02-07 14:53:12 +08:00
回复了 iOran 创建的主题 问与答 非运维的同学们,你们用过那些简单又实用的 shell 命令?
@Chewbacca 什么梗?
2017-02-06 17:10:25 +08:00
回复了 iOran 创建的主题 问与答 非运维的同学们,你们用过那些简单又实用的 shell 命令?
@UnisandK 这么多趣闻轶事呀~
2017-02-06 17:07:23 +08:00
回复了 iOran 创建的主题 问与答 非运维的同学们,你们用过那些简单又实用的 shell 命令?
@hambut 乐死个人~
2017-02-06 17:06:23 +08:00
回复了 iOran 创建的主题 问与答 非运维的同学们,你们用过那些简单又实用的 shell 命令?
@aheadlead sorry,打太快了。
2017-02-06 16:16:00 +08:00
回复了 iOran 创建的主题 问与答 非运维的同学们,你们用过那些简单又实用的 shell 命令?
@ryd994 以前只知道几个词汇,没有大面积用过,自己又是前端,最多就简单的命令。

今天一用感觉这些指令的确太有魅力了。
2017-02-06 15:59:24 +08:00
回复了 iOran 创建的主题 问与答 非运维的同学们,你们用过那些简单又实用的 shell 命令?
@aheadlead 能来一条案例吗?比如场景 + 结果过程,如果有点参数说明 9⃣️更棒了~
2017-02-06 15:52:29 +08:00
回复了 iOran 创建的主题 问与答 非运维的同学们,你们用过那些简单又实用的 shell 命令?
帖子不要沉了啊。我先说个最普罗大众的:
```
ls -al
```
2016-12-31 18:28:30 +08:00
回复了 iOran 创建的主题 iDev Objc & Swift 混编,相对于 Pure ObjC 的 ipa 文件大小变大探讨
@fly2never 那岂不是管理起来不方便?使用不了类似 cocoapod 的包管理工具。
2016-12-30 19:46:57 +08:00
回复了 iOran 创建的主题 iDev Objc & Swift 混编,相对于 Pure ObjC 的 ipa 文件大小变大探讨
@zzycn2012 谢谢
@miketeam 前几天刚填好几个坑,被你这么一刷,发现前面好多坑等我去填。

随便,最近填了 MRC/ARC 下的 ObjC/闭包 -> C Struct 实现和内存管理。最近想刷 Runtime/Runloop, @miketeam 有没有什么系统讲解原理的书推荐下,看博客啥的太零散了,要自己花费时间去找相关知识点来串,再理解,太“贵”了。

我也是 30 岁的程序员了,总觉得自己会得太少,每天都想节约时间多学点儿。自从觉得时间不够用后,觉得自己的确是学得快了,现在沉下心来学,比起毕业那几年,学得务实多了。再也不是那个做个简单的功能都要去各大 hub 找库的娃。楼主别灰心,看定一件事情就往下走,前路虽不易,回头必挂记。
2016-11-10 12:28:50 +08:00
回复了 jessefang 创建的主题 iDev 关于 block 循环引用的疑问
这玩意看代码太痛苦了。
2016-11-10 12:28:30 +08:00
回复了 jessefang 创建的主题 iDev 关于 block 循环引用的疑问
总的来说,这和 __block 这个关键字有关系。

这里有种细节可以说明下:
1. id obj; 实际上是:__strong id obj; 这里 obj 会有__strong 修饰符号;
2. 任何有__strong 或者是有__block 或者两种修饰符同时有的变量,在转换成 block 对象时,也就是转换成底层对象时候,会额外生成两个函数,一个叫__main_block_copy_0(它底层会调用_Block_object_assign),另一个叫__main_block_dispose_0(它底层会调用_Block_object_dispose)。这两个函数在栈拷贝 block 入堆 以及 从堆上释放内存块的时候调用。
3. 你用__block 或者__strong 修饰变量,这两种情况,被修饰的对象,都会在函数 block 被生成的时候由栈区入堆区。
4. 拷贝使用 copy ,释放使用 dispose.

最后来看你的 block 的底层实现,我们要关心两部分内容,这是第一部分:
/////////////////////////////////////////// 你看到的:
blk_ = ^{
NSLog(@"self = %@", tmp);
};
/////////////////////////////////////////// 使用 clang -rewrite-objc file.m 转换后的:
// @implementation MyObject
struct __Block_byref_tmp_0 {
void *__isa;
__Block_byref_tmp_0 *__forwarding;
int __flags;
int __size;
void (*__Block_byref_id_object_copy)(void*, void*);
void (*__Block_byref_id_object_dispose)(void*);
id tmp;
};

第二部分:
/////////////////////////////////////////// 你看到的:
blk_();
/////////////////////////////////////////// 使用 clang -rewrite-objc file.m 转换后的:
static void __MyObject__init_block_func_0(struct __MyObject__init_block_impl_0 *__cself) {
__Block_byref_tmp_0 *tmp = __cself->tmp; // bound by ref

NSLog((NSString *)&__NSConstantStringImpl__var_folders_zg_tjgxj12j793ccbxmtsg3l_0m0000gn_T_Test_b86496_mi_0, (tmp->__forwarding->tmp));
}

看到没,两部分里面的 tmp(第一部分就是 id tmp ,第二部分是 tmp->__forwarding->tmp),和 self 没扯上关系。
2016-11-10 10:40:33 +08:00
回复了 jessefang 创建的主题 iDev 关于 block 循环引用的疑问
你确定 “如果这里的 block 获取的不是 self ,而是 self 所持有的属性,不设置为 nil 也可以正常释放” 是正确的吗?

据我所知,这种也是会有循环引用的问题。不信你可以试试如下代码:

/////////////////////// 只是换了 MyObject 的定义,其他一样

@interface MyObject : NSObject
{
blk_t blk_;
id obj;
}
@end

@implementation MyObject
- (id)init
{
self = [super init];
blk_ = ^{
NSLog(@"self = %@", obj);
};
return self;
}

- (void)execBlock
{
blk_();
}

@end

//////////////////////

编译器是会报错的: ./YourProj/Test.m:17:24: Capturing 'self' strongly in this block is likely to lead to a retain cycle

上 Xcode 敲一敲试试吧。另外,你也可以用 clang -rewrite-objc Test.m 来查看它的底层 C 实现。
2016-11-09 23:52:39 +08:00
回复了 lisonfan 创建的主题 iDev [求助]关于自定义 'UITableView', 'UITableViewCell' 复用的问题。
最重要的错误是生成 homeTableView 的时候。本意是写一个 getter 方法来获取 homeTableView ,但你在 getter 方法里面调用 self. homeTableView ,这里有严重的 Bug 。
好文啊,居然没人赞,不合理。
2016-11-09 23:13:52 +08:00
回复了 jessefang 创建的主题 iDev 关于 block 循环引用的疑问
这段代码,建议楼主结合出处<Objective-C 高级编程>来理解,尤其是理解 block 的 C 语言实现。

首先,如 @nathanw 所说, MyObject 的实例 持有 block ; block 中, block 的结构体(block 底层 C 实现是 struct) 又持有 __strong 类型的 self 对象,此时,如果不在 block 执行完之后,将 block 中的 self 设置为 nil ,两者的循环强引用无法打破。

但本段代码也有缺点,如果 execBlock 实例方法不执行,也就是 blk();不执行,实际上没有机会将 id __strong MyObject var 设置为 nil ,也会有循环引用的问题。

合适的解决办法是:将 self 设置为 __weak 类型,防止双方强持有,也就解决问题了。
2016-11-09 22:46:33 +08:00
回复了 clarkchen 创建的主题 Python 酷炫狂拽屌炸天的钢板 HHKB--程序员送给自己的礼物
这个真的很吊。
1  2  3  4  5  6  7  8  9  10 ... 12  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1629 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 16:48 · PVG 00:48 · LAX 08:48 · JFK 11:48
Developed with CodeLauncher
♥ Do have faith in what you're doing.