There are several ways to do code reviews so the answer depends on what you mean by it. Code reviews in it's basic form is letting other people take a look in whatever specific piece of code you've written.
When people talk about code reviews they immediately think they are in form of meetings where a bunch of developers sit and walkthrough the code they've done. It doesn't have to be that way. If the developers find it useful, then stick to it. But if it is found to be wasteful then you need to find some alternatives to this types of meetings.
A code review meeting can be scaled in many ways, i.e. it can be short discussion with just two persons (the guy writing code and the guy reading code) or a long meeting where several people that walk through the code.
Before versus after
If you decide to write unit tests after then the code review becomes more about verifying if the code works. What I mean with that is that the reviewers need to step through all conditions in their head, e.g. make sure that the compiled code can take in arguments that wasn't intended.
If you write unit tests before a code review then the code reviews become more about verifying that the code does the right thing and you can be sure that, whatever the requirement specification was made, a specific test added also works and tests what is intended. This also helps traceability between requirement, code and tests.
Why not both at the same time?
…or you could just do it both at the same time using Pair Programming with the driver and mapreader metafor. The driver writes code, while the mapreader is the other set of eyes making sure the driver writes good code and usually writes the unit tests too. This could be considered unit testing and code review in really small, minutes long, iterations.
In my experience, I'd go with tests first using Test Driven Development and let someone check on my code to see I did the right thing. That will work if all developers in a project are aware of good code architecture but that's a whole different topic.