WWDC2012 eve @Tokyo

WWDC 2012 will be open within 3 weeks, I’d like to have a WWDC2012 eve party at my company Voyage Group. iOS developers who can go WWDC from Tokyo, if you have time on Friday, June 1st evening, please come!

How to register

Please visit: ATND and register yourself.

Fee

2000Yen/person

includes:
* Free beer/Free softdrink
* Free Pizza/Sushi

Date and time

June 1st, 2012 7pm~10pm

Place

AJITO of Voyage Group
〒150-0045 8F 8-16 Shinsen-cho Shibuya-ku, Tokyo

Topics

  • Making new friends
  • Exchanging hotel/tour/visit information, etc.

OK, let’s meet up on June 1st, at 7:00pm

An object in Cocoa, but do not use `*`?

Block

via NedraI via CC License

A funny question

Here is the funny question:

Is there any object in Cocoa/Objective-C that is a object but you do not use * to indicate it?

Now, think a few seconds before you read on: is there any such kind of objects?

NO? are you sure about that?

The Answer

The answer is YES! Yeah, there is a such kind of object in Cocoa/Objective-C.

It is the Block object!

Why?

Apple brought Block, a much more common name is Closure. As you can see from the wiki page, it is a non-standard extention to C/C++/Objective-C 2.0

Because it is an extension not only to Objective-C, but also to C/C++, so it has some special treatment.

Because Block has ^

To indicate a piece of code as a Block(or a Closure), it DOES need something like a pointer, but not a normal pointer. It act as a function pointer, but much more powerful.

So Apple introduced ^ as a replacement of * to Block.

In Objective-C ^ == *

As we can see, ^ is also a pointer, so why do we need another * to pointer to a Block?

Sample code

Use it as a method argument

typedef void (^MyBlock)(void);
- (void)doSomethingWith:(MyBlock)block;

Use it as a property

typedef void (^YourBlock)(void);
@property (nonatomic, copy) YourBlock block;

Use it as a function argument

typedef void (^HisBlock)(void);
void myfunction(HisBlock block);

Note that, none of above is using * to indicate a block, because the typedef has already indicated it is an object.


Of course, don’t forget to follow me @TonnyXu and Facebook

A Quick and Clean Way to Test Your HTTP GET and POST request

POST

photo via Corey Templeton via CC License

Well, this post is simple, HTTP POST is relatively complex than HTTP GET, some times you want to do a quick test with your post data.

Here are the solutions I know. If you have any other solutions, let me know.

A Free POST Only Test Sever

Access: http://www.posttestserver.com/post.php. This will dump all the http data for you.
A good/bad approach of this site I like is that this site will record your request and you can review your request later.
But we are not always just want to view the data in web page, sometimes, we also want to use it in unit test.

For example I had posted a request and your can see it here: http://www.posttestserver.com/data/2012/05/11/00.24.01738126829

It’s a test from an iOS App I recently work on.

The Ultimate Solution for Testing HTTP Request

http://httpbin.org/

This is the BEST site I know for test HTTP request. As it listed on the home page, there many test endpoint:

ENDPOINTS

/ This page.
/ip Returns Origin IP.
/user-agent Returns user-agent.
/headers Returns header dict.
/get Returns GET data.
/post Returns POST data.
/put Returns PUT data.
/delete Returns DELETE data.
/gzip Returns gzip-encoded data.
/status/:code Returns given HTTP Status code.
/response-headers?key=val Returns given response headers.
/redirect/:n 302 Redirects n times.
/relative-redirect/:n 302 Relative redirects n times.
/cookies Returns cookie data.
/cookies/set/:name/:value Sets a simple cookie.
/basic-auth/:user/:passwd Challenges HTTPBasic Auth.
/hidden-basic-auth/:user/:passwd 404′d BasicAuth.
/digest-auth/:qop/:user/:passwd Challenges HTTP Digest Auth.
/stream/:n Streams n–100 lines.
/delay/:n Delays responding for n–10 seconds.

This site is really awesome! Just try it!

Any suggestion?

If you have any suggestion or better solutions, please leave a comment.


Of course, don’t forget to follow me @TonnyXu and Facebook

Make the UITableView with group style to round the image.

The point is, the roundCorner is draw by a subview of UITableViewCell, and mean while, it’s not a public class, there is no way you can get layer.cornerRadius from any view. So we need to resolve this problem by ourselves.

There are 2 cases.

  1. There is only one cell.

    This case is ease, just use cell.contentView.layer.cornerRadius and cell.contentView.layer.masksToBounds to make it work.

  2. There are more than one cell.

    This case is a little bit difficult. We need to deal each cell separately. Use the cell.contentView.layer.mask property to make it work. The first cell and the last cell has different round corner position. So draw the path and make it work.