欢迎光临
我们一直在努力

Objc对象的销毁过程

uintptr_t objc_object::sidetable_release(bool performDealloc)

sidetable_release():

以下是runtime源码 NSObject.mm 1584行

bjc_object::sidetable_release(bool performDealloc)
{
#if SUPPORT_NONPOINTER_ISA
    assert(!isa.nonpointer);
#endif
    SideTable& table = SideTables()[this];

    bool do_dealloc = false;
    //加锁
    table.lock();
//获取当前对象所在的sidetable(一个hash表),在sidetable.refcnts(RefcountMap,一个map)中查到当前对象的迭代器
    RefcountMap::iterator it = table.refcnts.find(this);
    //接着判断迭代器是否是指向了sidetable的end
    //如果是就代表找不到:
    if (it == table.refcnts.end()) {
      //将对象标记为“正在析构”
      //标记需要dealloc
        do_dealloc = true;
        table.refcnts[this] = SIDE_TABLE_DEALLOCATING;
    } else if (it->second < SIDE_TABLE_DEALLOCATING) {
      //判断之前存储的引用计数值是否为 0,避免负数
      //将对象标记为“正在析构”
      //标记需要dealloc
        // SIDE_TABLE_WEAKLY_REFERENCED may be set. Don't change it.
        do_dealloc = true;
        it->second |= SIDE_TABLE_DEALLOCATING;
    } else if (! (it->second & SIDE_TABLE_RC_PINNED)) {
       //将引用计数减一
        it->second -= SIDE_TABLE_RC_ONE;
    }
   //解锁
    table.unlock();
    if (do_dealloc  &&  performDealloc) {
    //调用对象的dealloc方法:
        ((void(*)(objc_object *, SEL))objc_msgSend)(this, SEL_dealloc);
    }
    return do_dealloc;
}

如果调用了dealloc:

进行以下过程时,不能再创建有新的 __weak引用,否则会crash

递归调用父类的-dealloc

如果是 MRC 代码,则需要手动释放实例变量

最后调用NSObject的dealloc

NSObject的dealloc会调用 _objc_rootDealloc(self);

_objc_rootDealloc(id obj) NSObject.mm 1838行

_objc_rootDealloc(id obj)
{
    //是否还活着 断言
    assert(obj);
   //调用 objc_object::rootDealloc()
    obj->rootDealloc();
}

objc_object::rootDealloc() objc_object.h 415行

objc_object::rootDealloc()
{
    //是否使用TaggedPointer优化 是直接人突然
    if (isTaggedPointer()) return;  // fixme necessary?

   //不需要处理object_dispose的所有内容
    if (fastpath(isa.nonpointer  &&  
                 !isa.weakly_referenced  &&  
                 !isa.has_assoc  &&  
                 !isa.has_cxx_dtor  &&  
                 !isa.has_sidetable_rc))
    {
        assert(!sidetable_present());
        free(this);
    } 
    else {
       //调用object_dispose
        object_dispose((id)this);
    }
}

object_dispose(id obj) objc-runtime-new.mm 6313行

id object_dispose(id obj)
{
    //是否为nil 直接返回
    if (!obj) return nil;
    //调用 void *objc_destructInstance(id obj)
    objc_destructInstance(obj);    
    free(obj);
    return nil;
}

void *objc_destructInstance(id obj) objc-runtime-new.mm 6290行

void *objc_destructInstance(id obj) 
{
//如果不为nil 才处理
    if (obj) {
        //是否有析构函数  这个bool值取决于当前类以及父类往上是否有实例变量,如果有实例变量当前类就有.cxxDestruct,当前类或父类有此方法值=YES,都没有才=NO
        bool cxx = obj->hasCxxDtor();
       //是否有关联对象
        bool assoc = obj->hasAssociatedObjects();
        // This order is important.
      //如果有析构函数 调用 void object_cxxDestruct(id obj)
        if (cxx) object_cxxDestruct(obj);
       //如果有关联对象 移除关联对象
        if (assoc) _object_remove_assocations(obj);
        //调用objc_clear_deallocating()清空引用计数表
        obj->clearDeallocating();
    }
    return obj;
}

void object_cxxDestruct(id obj) objc-class.mm 473行

void object_cxxDestruct(id obj)
{
   //如果为nil 直接retun
    if (!obj) return;
   //是否使用TaggedPointer优化 是直接return
    if (obj->isTaggedPointer()) return;
   //调用 static void object_cxxDestructFromClass(id obj, Class cls)
    object_cxxDestructFromClass(obj, obj->ISA());
}

static void object_cxxDestructFromClass(id obj, Class cls) objc-class 447行

static void object_cxxDestructFromClass(id obj, Class cls)
{
    void (*dtor)(id);

    // Call cls's dtor first, then superclasses's dtors.

    //往父类递归调用.cxxDestruct 直到hasCxxDtor=NO return结束
    for ( ; cls; cls = cls->superclass) {
        if (!cls->hasCxxDtor()) return; 
        dtor = (void(*)(id))
            lookupMethodInClassAndLoadCache(cls, SEL_cxx_destruct);
        if (dtor != (void(*)(id))_objc_msgForward_impcache) {
            if (PrintCxxCtors) {
                _objc_inform("CXX: calling C++ destructors for class %s", 
                             cls->nameForLogging());
            }
            (*dtor)(obj);
        }
    }
}

.cxx_destruct

ARC下拥有实例变量才会有这个方法,通过Clang CodeGen生成,MRC都需要手动release所以不需要
ARC下会遍历当前对象所有的实例变量通过objc_storeStrong() release掉
具体实现过程:https://blog.sunnyxx.com/2014/04/02/objc_dig_arc_dealloc/

void objc_removeAssociatedObjects(id object) objc-runtime 635行

void objc_removeAssociatedObjects(id object) 
{
    if (object && object->hasAssociatedObjects()) {
        _object_remove_assocations(object);
    }
}

void _object_remove_assocations(id object) objc-references 316行

关联对象都存放在AssociationsHashMap中,以obj为key,以存放关联对象的ObjectAssociationMap为value,具体操作就是把ObjectAssociationMap中的所有对象对应的Allocator拿出来,作为参数发送给ReleaseValue(),然后调用objc_release()再对关联对象发送release
void _object_remove_assocations(id object) {
    vector< ObjcAssociation,ObjcAllocator<ObjcAssociation> > elements;
    {
        AssociationsManager manager;
        AssociationsHashMap &associations(manager.associations());
        if (associations.size() == 0) return;
        disguised_ptr_t disguised_object = DISGUISE(object);
        AssociationsHashMap::iterator i = associations.find(disguised_object);
        if (i != associations.end()) {
            // copy all of the associations that need to be removed.
            ObjectAssociationMap *refs = i->second;
            for (ObjectAssociationMap::iterator j = refs->begin(), end = refs->end(); j != end; ++j) {
                elements.push_back(j->second);
            }
            // remove the secondary table.
            delete refs;
            associations.erase(i);
        }
    }
    // the calls to releaseValue() happen outside of the lock.
    for_each(elements.begin(), elements.end(), ReleaseValue());
}

void objc_clear_deallocating(id obj) NSObject.mm 1705行

void 
objc_clear_deallocating(id obj) 
{
    assert(obj);

    if (obj->isTaggedPointer()) return;
    obj->clearDeallocating();
}

objc_object::clearDeallocating() objc-object.h 399行

inline void 
objc_object::clearDeallocating()
{
    if (slowpath(!isa.nonpointer)) {
        // Slow path for raw pointer isa.
       //调用sidetable_clearDeallocating()把对象的weak指针置nil,把对象的计数引用移除
        sidetable_clearDeallocating();
    }
    else if (slowpath(isa.weakly_referenced  ||  isa.has_sidetable_rc)) {
        /判断是否有过弱引用   是否因为计数太大有多个sidetable
        // Slow path for non-pointer isa with weak refs and/or side table data.
       //调用clearDeallocating_slow();内部再分开判断各自实现sidetable_clearDeallocating的内容
        clearDeallocating_slow();
    }

    assert(!sidetable_present());
}
相信看了上面的源码分析 对于下面这种图 父类有属性,关联对象,子类有属性关联对象,此时创建个[SubClass new]然后释放掉,这几个类的dealloc打印顺序是什么应该也清楚了,当然属性之间dealloc顺序,关联对象之间顺序还需要注意,属性dealloc顺序是倒序,关联对象看在哪添加的,父类添加的后dealloc,在同一个类里添加的,和添加顺序有关系和key也有关系,这个目前还没搞太懂,希望有懂的可以告知
屏幕快照 2018-11-15 下午2.00.48.png

runtime源代码下载地址
搜索objc4 选择数字最大的即为最新的(并不是最下面的就是最新的,看数字大小)

赞(3) 打赏
未经允许不得转载:松哥博客 » Objc对象的销毁过程
分享到: 更多 (0)

评论 897

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    Acheter Tadalis Sx 10 Mg Valtrex Online Purchase viagra Buy Viagra 100mg Uk

    Kelmazy3个月前 (06-02)回复
  2. #2

    Primolut To Buy Online Levitra Probepackung cheapest cialis Zithromax Tiredness

    Kelmazy2个月前 (06-12)回复
  3. #3

    Cialis Viagra Nebenwirkungen Elocon Website Internet Fedex Shipping Low Price

    Kelmazy2个月前 (06-25)回复
  4. #4

    tadalafil

    BennyEnalk2个月前 (06-29)回复
  5. #5
  6. #6

    vardenafil

    BrettSwoth2个月前 (06-30)回复
  7. #7

    wellbutrin

    BennyEnalk2个月前 (06-30)回复
  8. #8
  9. #9

    buy viagra

    BennyEnalk2个月前 (07-01)回复
  10. #10

    seroquel

    BennyEnalk2个月前 (07-02)回复
  11. #11
  12. #12
  13. #13
  14. #14

    prozac 20 mg

    BennyEnalk2个月前 (07-03)回复
  15. #15

    synthroid

    BennyEnalk2个月前 (07-04)回复
  16. #16

    albuterol

    BennyEnalk2个月前 (07-04)回复
  17. #17
  18. #18
  19. #19
  20. #20
  21. #21
  22. #22
  23. #23
  24. #24

    Cialis Turkei viagra Generic For Propecia Kamagra Bestellen Per Nachnahme

    Kelmazy2个月前 (07-07)回复
  25. #25
  26. #26
  27. #27

    buy kamagra

    BennyEnalk2个月前 (07-09)回复
  28. #28
  29. #29
  30. #30

    valtrex

    BennyEnalk1个月前 (07-10)回复
  31. #31
  32. #32

    retin a

    BennyEnalk1个月前 (07-12)回复
  33. #33

    http://buynexium.us.org/ – buy nexium

    Aaronmum1个月前 (07-12)回复
  34. #34

    prednisolone

    BrettSwoth1个月前 (07-12)回复
  35. #35

    Nexium

    BennyEnalk1个月前 (07-12)回复
  36. #36

    http://allopurinol.ooo/ – allopurinol

    Aaronmum1个月前 (07-12)回复
  37. #37

    celebrex

    Aaronmum1个月前 (07-12)回复
  38. #38
  39. #39

    http://buyretinaonlinenoprescription.com/ – retin a 0.025

    Aaronmum1个月前 (07-13)回复
  40. #40

    acyclovir

    BennyEnalk1个月前 (07-14)回复
  41. #41

    http://elimite.us.org/ – where can i buy elimite

    Aaronmum1个月前 (07-14)回复
  42. #42
  43. #43

    http://cost-of-viagra.com/ – Viagra Discounts

    Aaronmum1个月前 (07-14)回复
  44. #44

    strattera

    BrettSwoth1个月前 (07-15)回复
  45. #45

    augmentin

    BennyEnalk1个月前 (07-15)回复
  46. #46

    http://buyviagra.irish/ – viagra

    Aaronmum1个月前 (07-15)回复
  47. #47
  48. #48

    http://cheapcialiswithprescription.com/ – cialis canada pharmacy online

    Aaronmum1个月前 (07-16)回复
  49. #49

    bactrim

    BennyEnalk1个月前 (07-16)回复
  50. #50

    http://droitsdemocratie.net/ – prozac

    Aaronmum1个月前 (07-16)回复
  51. #51
  52. #52

    cipro

    Kennethsnize1个月前 (07-16)回复
  53. #53

    tadalafil

    BennyEnalk1个月前 (07-17)回复
  54. #54

    xenical

    BrettSwoth1个月前 (07-17)回复
  55. #55

    http://celexa.us.org/ – Buy Celexa Online

    Aaronmum1个月前 (07-17)回复
  56. #56

    source

    BennyEnalk1个月前 (07-17)回复
  57. #57

    http://keralaitparks.org/ – Amoxicillin Generic

    Aaronmum1个月前 (07-17)回复
  58. #58

    levitra

    BennyEnalk1个月前 (07-18)回复
  59. #59

    http://buyviagrasoft.us.com/ – viagra soft online

    Aaronmum1个月前 (07-18)回复
  60. #60
  61. #61

    http://zithromax.run/ – zithromax without prescription

    Aaronmum1个月前 (07-19)回复
  62. #62

    cipro for sale

    Aaronmum1个月前 (07-19)回复
  63. #63
  64. #64

    kamagra

    BennyEnalk1个月前 (07-19)回复
  65. #65

    http://cost-of-viagra.com/ – cost of viagra

    Aaronmum1个月前 (07-19)回复
  66. #66

    kamagra

    BennyEnalk1个月前 (07-20)回复
  67. #67

    http://zithromax.us.org/ – zithromax

    Aaronmum1个月前 (07-20)回复
  68. #68

    Amoxicillin 500 Side Effects Amoxicillin Pills canadian pharmacy cialis Venta Cialis Super Active

    Kelmazy1个月前 (07-20)回复
  69. #69

    tadalafil

    BennyEnalk1个月前 (07-20)回复
  70. #70

    http://gystyle.com/ – tadalafil online canada

    Aaronmum1个月前 (07-21)回复
  71. #71

    bactrim

    Aaronmum1个月前 (07-21)回复
  72. #72
  73. #73

    http://acyclovir.us.org/ – Acyclovir

    Aaronmum1个月前 (07-21)回复
  74. #74
  75. #75
  76. #76

    http://indocin.wtf/ – indocin

    Aaronmum1个月前 (07-22)回复
  77. #77

    prozac

    BennyEnalk1个月前 (07-22)回复
  78. #78

    http://buspar.company/ – buspirone 5 mg

    Aaronmum1个月前 (07-22)回复
  79. #79
  80. #80

    http://benicar.company/ – price of benicar

    Aaronmum1个月前 (07-23)回复
  81. #81
  82. #82
  83. #83

    http://mobic.company/ – mobic 7.5 mg tablets

    Aaronmum1个月前 (07-24)回复
  84. #84
  85. #85
  86. #86

    http://cipro4you.us.com/ – cipro 500

    Aaronmum4周前 (07-24)回复
  87. #87

    Hi where i can buy
    http://amoxicillin500mg.club – amoxicillin 500 milligrams ? Please help me found
    amoxicillin 500 mg capsule
    Thanks!

    Jerrcyseste4周前 (07-25)回复
  88. #88

    Hi where i can buy
    http://amoxicillin500mg.club – amoxicillin pills 500 mg ? Please help me found
    amoxicillin 500 dosage
    Thanks!

    Jerrcyseste4周前 (07-25)回复
  89. #89

    Hi where i can buy
    http://amoxicillin500mg.club – amoxicillin 500 mg capsule ? Please help me found
    amoxicillin 500 mg price
    Thanks!

    Jerrcyseste4周前 (07-25)回复
  90. #90
  91. #91

    http://markcrozermusic.com/ – WELLBUTRIN 75MG

    Aaronmum4周前 (07-26)回复
  92. #92

    nexium

    BrettSwoth4周前 (07-26)回复
  93. #93
  94. #94

    http://viagra007.com/ – canadian viagra cheap

    Aaronmum4周前 (07-26)回复
  95. #95

    be is now

    b603 how to get is in canada

    LiyaRuite4周前 (07-27)回复
  96. #96
  97. #97

    http://synthroid.recipes/ – synthroid

    Aaronmum4周前 (07-27)回复
  98. #98
  99. #99
  100. #100
  101. #101

    http://bactrim.club/ – generic bactrim

    Aaronmum4周前 (07-28)回复
  102. #102
  103. #103
  104. #104

    DennisVon DennisVon
    http://hucancaikuizu.com/home.php?mod=space&uid=15518
    3249890jk23e455

    MosesErype4周前 (07-29)回复
  105. #105

    amoxil

    BennyEnalk4周前 (07-29)回复
  106. #106

    http://tadalafil365.us.org/ – Tadalafil

    Aaronmum4周前 (07-29)回复
  107. #107
  108. #108

    celebrex

    Aaronmum4周前 (07-29)回复
  109. #109

    977c pfizer is 100mg cost

    http://ph-6e79e-2-1.com/ – is en ligne acheter

    is et implants mammaire

    LiyaRuite4周前 (07-29)回复
  110. #110
  111. #111

    http://wellbutrinxr.com/ – Wellbutrin

    Aaronmum3周前 (07-30)回复
  112. #112

    india shopping online is

    82f8 is suppliers cheap black

    LidaRuite3周前 (07-30)回复
  113. #113

    977c is e vene varicose

    http://ph-6e79e-2-1.com/ – is

    is come si us

    LiyaRuite3周前 (07-30)回复
  114. #114

    is gnrique 20mg

    82f8 is four 5 mg pills same as

    LidaRuite3周前 (07-30)回复
  115. #115

    http://clonidine.company/ – clonidine

    Aaronmum3周前 (07-30)回复
  116. #116
  117. #117

    977c can i use is with prozac

    http://ph-6e79e-2-1.com/ – is et implants mammaire

    can you take is at 15

    LiyaRuite3周前 (07-30)回复
  118. #118
  119. #119

    http://antabuse.run/ – buy disulfiram without prescription

    Aaronmum3周前 (07-31)回复
  120. #120

    paxil

    BrettSwoth3周前 (07-31)回复
  121. #121
  122. #122

    977c try it is best place

    http://ph-6e79e-2-1.com/ – acheter is quebec

    sales is statistics

    LiyaRuite3周前 (07-31)回复
  123. #123
  124. #124

    http://strattera.us.org/ – buy strattera

    Aaronmum3周前 (07-31)回复
  125. #125

    977c medco is prescription cost

    http://ph-6e79e-2-1.com/ – is

    is bestellung apotheke

    LiyaRuite3周前 (08-01)回复
  126. #126
  127. #127

    http://buycialis.club/ – where can i buy cialis without a prescription

    Aaronmum3周前 (08-01)回复
  128. #128
  129. #129

    http://wellbutrin.club/ – wellbutrin

    Aaronmum3周前 (08-02)回复
  130. #130
  131. #131
  132. #132

    http://buyclonidine.us.org/ – buy clonidine

    Aaronmum3周前 (08-02)回复
  133. #133

    do walgreens sale is

    70e5 is at prices

    InnaRuite3周前 (08-03)回复
  134. #134
  135. #135

    http://cialiscost.us.org/ – cialis 20mg

    Aaronmum3周前 (08-03)回复
  136. #136

    horn is

    70e5 be is pay by paypal

    InnaRuite3周前 (08-03)回复
  137. #137
  138. #138
  139. #139

    http://tadalis.us.com/ – tadalis no rx

    Aaronmum3周前 (08-04)回复
  140. #140
  141. #141
  142. #142

    http://acyclovir.irish/ – acyclovir

    Aaronmum3周前 (08-04)回复
  143. #143
  144. #144
  145. #145

    http://synthroid.institute/ – synthroid

    Aaronmum3周前 (08-05)回复
  146. #146
  147. #147

    http://furosemide365.us.org/ – medication furosemide

    Aaronmum2周前 (08-05)回复
  148. #148
  149. #149
  150. #150

    http://doxycycline.us.org/ – doxycycline

    Aaronmum2周前 (08-06)回复
  151. #151

    is auswirkungen

    4dc5 is australia paypal

    GalyaRuite2周前 (08-07)回复
  152. #152
  153. #153

    http://doxycycline.recipes/ – doxycycline

    Aaronmum2周前 (08-07)回复
  154. #154
  155. #155

    cafergot

    BennyEnalk2周前 (08-07)回复
  156. #156

    http://furosemide.institute/ – furosemide 40 mg for sale

    Aaronmum2周前 (08-07)回复
  157. #157
  158. #158

    http://buymethotrexate.us.com/ – Generic Methotrexate

    Aaronmum2周前 (08-08)回复
  159. #159

    4dca is was passiert

    http://ph-09b15-2-1.com/ – qu est ce que le is

    athes is tadalafil

    GalyaRuite2周前 (08-08)回复
  160. #160
  161. #161

    4dca dr order at is

    next day ise

    GalyaRuite2周前 (08-09)回复
  162. #162
  163. #163

    d74b cialis 5 mg funciona

    cialis pills

    cialis buy in mexico

    GalyaRuite2周前 (08-09)回复
  164. #164
  165. #165
  166. #166

    d74b cialis zeugungsfahigkeit

    http://ph-09b15-3-0.com/

    precio del generico del cialis

    GalyaRuite2周前 (08-09)回复
  167. #167
  168. #168

    4dca cheapest is new zealand

    http://ph-09b15-3-1.com/

    how strong is 5 mg of is

    GalyaRuite2周前 (08-09)回复
  169. #169

    http://buytenormin.us.com/ – tenormin mastercard

    Aaronmum2周前 (08-09)回复
  170. #170

    4dca only here is prescriptions

    be is 10mg online

    GalyaRuite2周前 (08-10)回复
  171. #171
  172. #172

    http://buypaxil.us.org/ – buy paxil

    Aaronmum2周前 (08-10)回复
  173. #173
  174. #174

    4dca we like it is uk

    be is originale usa

    GalyaRuite2周前 (08-11)回复
  175. #175

    http://propecia.club/ – order finasteride

    Aaronmum2周前 (08-11)回复
  176. #176
  177. #177

    http://ventolin365.us.org/ – proventil inhaler for sale

    Aaronmum2周前 (08-11)回复
  178. #178

    d74b cialis buying guide

    cialis precio espaa

    GalyaRuite2周前 (08-11)回复
  179. #179
  180. #180

    lexapro

    BrettSwoth2周前 (08-12)回复
  181. #181

    clomid

    Aaronmum2周前 (08-12)回复
  182. #182

    http://effexor.us.org/ – effexor xr

    Aaronmum2周前 (08-12)回复
  183. #183
  184. #184
  185. #185

    0978 super cialis now active buy

    just try cialis generic

    GalyaRuite1周前 (08-12)回复
  186. #186

    http://buykamagra.irish/ – generic kamagra

    Aaronmum1周前 (08-12)回复
  187. #187

    a94c is precio espaa

    medicaments is 20 mg

    GalyaRuite1周前 (08-12)回复
  188. #188

    prozac

    BennyEnalk1周前 (08-13)回复
  189. #189

    a94c online ato di is

    http://ph-5b6ba-2-1.com/ – try it 10mg is

    at is versus is

    GalyaRuite1周前 (08-13)回复
  190. #190

    0978 cialis dosages levels

    http://ph-5b6ba-3-0.com/

    generic cialis versus cialis

    GalyaRuite1周前 (08-13)回复
  191. #191

    http://torsemide.company/ – torsemide

    Aaronmum1周前 (08-13)回复
  192. #192
  193. #193

    http://genericforviagra.us.com/ – order generic viagra

    Aaronmum1周前 (08-14)回复
  194. #194
  195. #195

    0978 cialis farmacia onlin

    http://ph-5b6ba-3-0.com/

    generiches cialis tadalafil

    GalyaRuite1周前 (08-14)回复
  196. #196

    http://buyprednisolone.ooo/ – buy prednisolone 5mg

    Aaronmum1周前 (08-14)回复
  197. #197

    SILDALIS

    BennyEnalk1周前 (08-15)回复
  198. #198

    http://propranolol.wtf/ – propranolol

    Aaronmum1周前 (08-15)回复
  199. #199
  200. #200

    http://antabuse.recipes/ – your domain name

    Aaronmum1周前 (08-16)回复
  201. #201

    gea cbd hemp

    bomyesseday1周前 (08-16)回复
  202. #202
  203. #203
  204. #204
  205. #205
  206. #206
  207. #207

    eye casino play

    LariOutrarf1周前 (08-16)回复
  208. #208
  209. #209
  210. #210
  211. #211
  212. #212
  213. #213

    hxa cbd hemp

    sonoganions1周前 (08-16)回复
  214. #214
  215. #215
  216. #216
  217. #217
  218. #218
  219. #219
  220. #220
  221. #221
  222. #222
  223. #223
  224. #224
  225. #225
  226. #226
  227. #227
  228. #228
  229. #229
  230. #230
  231. #231
  232. #232
  233. #233
  234. #234
  235. #235
  236. #236
  237. #237
  238. #238
  239. #239
  240. #240
  241. #241
  242. #242
  243. #243
  244. #244
  245. #245
  246. #246
  247. #247
  248. #248
  249. #249
  250. #250
  251. #251
  252. #252

    http://kamagra365.us.org/ – buy kamagra oral jelly online

  253. #253
  254. #254
  255. #255
  256. #256
  257. #257
  258. #258
  259. #259
  260. #260
  261. #261
  262. #262
  263. #263
  264. #264
  265. #265
  266. #266
  267. #267
  268. #268
  269. #269
  270. #270
  271. #271
  272. #272
  273. #273
  274. #274
  275. #275
  276. #276
  277. #277
  278. #278
  279. #279
  280. #280
  281. #281
  282. #282
  283. #283
  284. #284
  285. #285
  286. #286
  287. #287
  288. #288
  289. #289
  290. #290
  291. #291
  292. #292
  293. #293
  294. #294
  295. #295
  296. #296
  297. #297
  298. #298
  299. #299
  300. #300
  301. #301
  302. #302
  303. #303
  304. #304
  305. #305
  306. #306
  307. #307
  308. #308
  309. #309
  310. #310

    http://propecia4you.us.com/ – propecia for less

  311. #311
  312. #312
  313. #313
  314. #314
  315. #315
  316. #316
  317. #317
  318. #318
  319. #319
  320. #320
  321. #321
  322. #322
  323. #323
  324. #324
  325. #325
  326. #326
  327. #327
  328. #328
  329. #329
  330. #330
  331. #331
  332. #332
  333. #333
  334. #334
  335. #335
  336. #336
  337. #337
  338. #338
  339. #339
  340. #340
  341. #341
  342. #342
  343. #343
  344. #344
  345. #345
  346. #346
  347. #347
  348. #348
  349. #349
  350. #350
  351. #351
  352. #352
  353. #353
  354. #354
  355. #355
  356. #356
  357. #357
  358. #358
  359. #359
  360. #360
  361. #361
  362. #362
  363. #363
  364. #364
  365. #365
  366. #366
  367. #367
  368. #368
  369. #369

    http://allopurinol.us.org/ – allopurinol without prescription

  370. #370
  371. #371
  372. #372
  373. #373
  374. #374
  375. #375
  376. #376
  377. #377
  378. #378
  379. #379
  380. #380
  381. #381
  382. #382
  383. #383
  384. #384
  385. #385
  386. #386
  387. #387
  388. #388
  389. #389
  390. #390
  391. #391
  392. #392
  393. #393
  394. #394
  395. #395
  396. #396
  397. #397
  398. #398
  399. #399
  400. #400
  401. #401
  402. #402
  403. #403
  404. #404
  405. #405
  406. #406
  407. #407
  408. #408
  409. #409
  410. #410
  411. #411
  412. #412
  413. #413
  414. #414
  415. #415
  416. #416
  417. #417
  418. #418
  419. #419
  420. #420
  421. #421
  422. #422
  423. #423
  424. #424
  425. #425
  426. #426
  427. #427
  428. #428
  429. #429
  430. #430
  431. #431
  432. #432
  433. #433
  434. #434

    http://buyamoxicillin.us.org/ – amoxicillin online

  435. #435
  436. #436
  437. #437
  438. #438
  439. #439
  440. #440
  441. #441
  442. #442
  443. #443

    What’s up friends, nice article and nice arguments commented here, I
    am truly enjoying by these.

  444. #444
  445. #445
  446. #446
  447. #447
  448. #448
  449. #449
  450. #450
  451. #451
  452. #452
  453. #453
  454. #454
  455. #455
  456. #456
  457. #457
  458. #458
  459. #459
  460. #460
  461. #461
  462. #462
  463. #463
  464. #464

    As I web-site possessor I believe the content matter here is rattling magnificent
    , appreciate it for your hard work. You should keep it up forever!
    Best of luck.

  465. #465
  466. #466
  467. #467
  468. #468
  469. #469
  470. #470
  471. #471
  472. #472
  473. #473
  474. #474
  475. #475

    I conceive you have noted some very interesting details, thanks for the post.

  476. #476
  477. #477

    Currently it seems like Drupal is the preferred blogging platform out
    there right now. (from what I’ve read) Is that what you’re using on your blog?

  478. #478
  479. #479
  480. #480
  481. #481
  482. #482
  483. #483
  484. #484
  485. #485
  486. #486
  487. #487
  488. #488
  489. #489
  490. #490
  491. #491
  492. #492
  493. #493

    http://genericviagra.us.org/ – Viagra Mastercard

  494. #494
  495. #495
  496. #496
  497. #497
  498. #498
  499. #499
  500. #500
  501. #501
  502. #502
  503. #503
  504. #504
  505. #505
  506. #506
  507. #507
  508. #508
  509. #509
  510. #510
  511. #511
  512. #512
  513. #513
  514. #514
  515. #515
  516. #516
  517. #517
  518. #518
  519. #519
  520. #520
  521. #521

    I was just looking for this information for some time.

    After 6 hours of continuous Googleing, finally I got it in your web site.
    I wonder what is the lack of Google strategy that don’t rank this type
    of informative sites in top of the list. Generally the top websites are full of garbage.

  522. #522
  523. #523
  524. #524
  525. #525
  526. #526
  527. #527
  528. #528
  529. #529
  530. #530
  531. #531
  532. #532
  533. #533
  534. #534
  535. #535
  536. #536
  537. #537

    Keep up the fantastic piece of work, I read few posts on this internet site and I think that
    your website is really interesting and holds sets of wonderful info.

  538. #538
  539. #539
  540. #540
  541. #541
  542. #542
  543. #543
  544. #544
  545. #545
  546. #546
  547. #547
  548. #548
  549. #549
  550. #550
  551. #551
  552. #552
  553. #553
  554. #554
  555. #555
  556. #556
  557. #557
  558. #558
  559. #559
  560. #560
  561. #561
  562. #562
  563. #563
  564. #564
  565. #565
  566. #566
  567. #567
  568. #568
  569. #569
  570. #570
  571. #571
  572. #572
  573. #573
  574. #574
  575. #575
  576. #576
  577. #577
  578. #578
  579. #579
  580. #580
  581. #581
  582. #582
  583. #583
  584. #584
  585. #585
  586. #586
  587. #587
  588. #588
  589. #589
  590. #590
  591. #591
  592. #592
  593. #593
  594. #594
  595. #595
  596. #596
  597. #597
  598. #598
  599. #599
  600. #600
  601. #601
  602. #602
  603. #603
  604. #604
  605. #605
  606. #606
  607. #607
  608. #608
  609. #609
  610. #610
  611. #611
  612. #612
  613. #613
  614. #614
  615. #615
  616. #616
  617. #617

    http://lasix.club/ – lasix 40 mg

  618. #618
  619. #619
  620. #620
  621. #621
  622. #622
  623. #623
  624. #624
  625. #625
  626. #626
  627. #627
  628. #628
  629. #629
  630. #630
  631. #631
  632. #632
  633. #633
  634. #634
  635. #635
  636. #636
  637. #637
  638. #638
  639. #639
  640. #640
  641. #641
  642. #642
  643. #643
  644. #644
  645. #645
  646. #646
  647. #647
  648. #648
  649. #649
  650. #650
  651. #651
  652. #652
  653. #653
  654. #654
  655. #655
  656. #656
  657. #657
  658. #658
  659. #659
  660. #660

    I think everything published made a lot of sense.
    But, think on this, what if you were to create a awesome post title?
    I ain’t suggesting your information is not good, however suppose you added a title to maybe grab a
    person’s attention? I mean Objc对象的销毁过程-松哥博客 is
    kinda plain. You could glance at Yahoo’s front page and see how they create article titles to get people interested.
    You might add a related video or a pic or two to get people interested about
    everything’ve written. In my opinion, it could bring your website
    a little bit more interesting.

    Lida2天前回复
  661. #661
  662. #662
  663. #663
  664. #664
  665. #665
  666. #666
  667. #667
  668. #668
  669. #669
  670. #670
  671. #671
  672. #672
  673. #673
  674. #674
  675. #675
  676. #676
  677. #677
  678. #678
  679. #679
  680. #680
  681. #681
  682. #682
  683. #683
  684. #684
  685. #685
  686. #686
  687. #687
  688. #688
  689. #689
  690. #690
  691. #691
  692. #692
  693. #693
  694. #694
  695. #695
  696. #696
  697. #697
  698. #698
  699. #699
  700. #700
  701. #701
  702. #702
  703. #703
  704. #704
  705. #705
  706. #706
  707. #707
  708. #708
  709. #709
  710. #710
  711. #711
  712. #712
  713. #713
  714. #714
  715. #715
  716. #716
  717. #717
  718. #718
  719. #719
  720. #720
  721. #721
  722. #722
  723. #723
  724. #724
  725. #725
  726. #726
  727. #727
  728. #728
  729. #729
  730. #730
  731. #731
  732. #732
  733. #733
  734. #734
  735. #735
  736. #736
  737. #737
  738. #738
  739. #739
  740. #740
  741. #741
  742. #742
  743. #743
  744. #744
  745. #745
  746. #746
  747. #747
  748. #748
  749. #749
  750. #750
  751. #751
  752. #752
  753. #753
  754. #754
  755. #755
  756. #756
  757. #757
  758. #758
  759. #759
  760. #760
  761. #761
  762. #762
  763. #763
  764. #764
  765. #765
  766. #766
  767. #767
  768. #768
  769. #769
  770. #770
  771. #771
  772. #772
  773. #773

    is online thailand

    af29 is manila

  774. #774
  775. #775
  776. #776
  777. #777
  778. #778
  779. #779
  780. #780
  781. #781
  782. #782
  783. #783
  784. #784
  785. #785
  786. #786
  787. #787
  788. #788
  789. #789
  790. #790
  791. #791
  792. #792
  793. #793
  794. #794
  795. #795
  796. #796
  797. #797
  798. #798
  799. #799
  800. #800
  801. #801
  802. #802
  803. #803
  804. #804
  805. #805
  806. #806
  807. #807
  808. #808
  809. #809
  810. #810
  811. #811
  812. #812
  813. #813
  814. #814
  815. #815
  816. #816
  817. #817
  818. #818
  819. #819
  820. #820
  821. #821
  822. #822

    nna

  823. #823
  824. #824
  825. #825
  826. #826
  827. #827
  828. #828
  829. #829
  830. #830
  831. #831
  832. #832
  833. #833
  834. #834
  835. #835
  836. #836
  837. #837
  838. #838
  839. #839
  840. #840
  841. #841
  842. #842
  843. #843
  844. #844
  845. #845
  846. #846
  847. #847
  848. #848
  849. #849
  850. #850
  851. #851
  852. #852
  853. #853
  854. #854
  855. #855
  856. #856

    hvy

  857. #857
  858. #858
  859. #859
  860. #860
  861. #861
  862. #862
  863. #863
  864. #864
  865. #865
  866. #866
  867. #867
  868. #868
  869. #869
  870. #870
  871. #871
  872. #872
  873. #873
  874. #874
  875. #875
  876. #876
  877. #877
  878. #878
  879. #879
  880. #880
  881. #881
  882. #882
  883. #883
  884. #884
  885. #885
  886. #886
  887. #887
  888. #888
  889. #889
  890. #890
  891. #891
  892. #892
  893. #893
  894. #894
  895. #895
  896. #896
  897. #897

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏