First of all, to popularize memory storage area knowledge:
Memory is divided into five areas: heap, stack, global zone, literal constant area, code areaHeap Storage: A block of memory allocated by new, ALLOC, controlled by the programmer to release P1 = (char *) malloc;Stack storage: Store function parameters, local variables, variable stores that are automatically purged by the compiler when they are not needed. int b; Char s[] = "ABC"; CHAR*P2; Global (Static): Global variables and static variables stored in a block, after the end of the program by the system to release the text constant area: the constant string is placed here, the program ends the system frees the Code area: the binary code that holds the function body
1 Block memory potential under MRCQuestion: 1-Is there a problem with this code in arc? There is no 2-is there a problem with this code in MRC? exists, after setting block, callback block at the appropriate time, do not want block to be released, so we need to copy the block
typedefvoid(^Blocktype) ();//a function that defines the return value as a block typeBlocktype Test () {inti =5; Blocktype BB= ^{NSLog (@ "xxxx i= %d ", i); } //return BB; //prevent being released, copy to the heap area, so need to change to return Block_copy (BB); returnblock_copy (BB);}intMain () {@autoreleasepool {//receive the return value of testBlocktype B1 =test (); //Execute blockB1 (); //MRC next copy to the heap area, need to release the Block control, so you need to add a sentence Block_release (B1 ());Block_release (B1 ()); }}
2 Block Circular referenceProblem: A strong reference to the block after the block has been copy,copy in the controller, the self of the block strongly references the controller, resulting in a strong reference ring that cannot be released from one another Solve the problem: to break the strong citation ring as long as the self into a weak pointer in the block, you can solve;
// the magic of this method is: typeof (self) weakself = self; Change the self in block to Weakself
Finally I read in the process of the post pasted: —————— memory ———————— Stack differences: http://blog.csdn.net/aixiaolin/article/details/6863991:// blog.csdn.net/wealoong/article/details/8686353 —————— block ———————— arc and non-ARC block properties problem: http://www.mgenware.com/ blog/?p=1493 three scenarios prone to "circular referencing": Http://www.2cto.com/kf/201409/332193.htmlblock Use test: http://www.cocoachina.com/bbs/ Read.php?tid=152222&page=1
Two points of attention for iOS using block--3 block