Skip to content

Commit 18c8629

Browse files
committed
revert 3333598: fix memory leak when replacing arrays
1 parent c050ae5 commit 18c8629

File tree

3 files changed

+11
-46
lines changed

3 files changed

+11
-46
lines changed

src/observer/array.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ var arrayMethods = Object.create(arrayProto)
2828
}
2929
var result = original.apply(this, args)
3030
var ob = this.__ob__
31-
var inserted, removed
31+
var inserted
3232
switch (method) {
3333
case 'push':
3434
inserted = args
@@ -38,17 +38,11 @@ var arrayMethods = Object.create(arrayProto)
3838
break
3939
case 'splice':
4040
inserted = args.slice(2)
41-
removed = result
42-
break
43-
case 'pop':
44-
case 'shift':
45-
removed = [result]
4641
break
4742
}
4843
if (inserted) ob.observeArray(inserted)
49-
if (removed) ob.unobserveArray(removed)
5044
// notify change
51-
ob.notify()
45+
ob.dep.notify()
5246
return result
5347
})
5448
})

src/observer/index.js

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -91,42 +91,7 @@ Observer.prototype.walk = function (obj) {
9191
Observer.prototype.observeArray = function (items) {
9292
var i = items.length
9393
while (i--) {
94-
var ob = Observer.create(items[i])
95-
if (ob) {
96-
(ob.parents || (ob.parents = [])).push(this)
97-
}
98-
}
99-
}
100-
101-
/**
102-
* Remove self from the parent list of removed objects.
103-
*
104-
* @param {Array} items
105-
*/
106-
107-
Observer.prototype.unobserveArray = function (items) {
108-
var i = items.length
109-
while (i--) {
110-
var ob = items[i] && items[i].__ob__
111-
if (ob) {
112-
ob.parents.$remove(this)
113-
}
114-
}
115-
}
116-
117-
/**
118-
* Notify self dependency, and also parent Array dependency
119-
* if any.
120-
*/
121-
122-
Observer.prototype.notify = function () {
123-
this.dep.notify()
124-
var parents = this.parents
125-
if (parents) {
126-
var i = parents.length
127-
while (i--) {
128-
parents[i].notify()
129-
}
94+
Observer.create(items[i])
13095
}
13196
}
13297

@@ -217,6 +182,12 @@ function defineReactive (obj, key, val) {
217182
if (childOb) {
218183
childOb.dep.depend()
219184
}
185+
if (_.isArray(val)) {
186+
for (var e, i = 0, l = val.length; i < l; i++) {
187+
e = val[i]
188+
e && e.__ob__ && e.__ob__.dep.depend()
189+
}
190+
}
220191
}
221192
return val
222193
},

src/util/lang.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ exports.set = function set (obj, key, val) {
2424
return
2525
}
2626
ob.convert(key, val)
27-
ob.notify()
27+
ob.dep.notify()
2828
if (ob.vms) {
2929
var i = ob.vms.length
3030
while (i--) {
@@ -51,7 +51,7 @@ exports.delete = function (obj, key) {
5151
if (!ob) {
5252
return
5353
}
54-
ob.notify()
54+
ob.dep.notify()
5555
if (ob.vms) {
5656
var i = ob.vms.length
5757
while (i--) {

0 commit comments

Comments
 (0)